LINUX.ORG.RU
ФорумTalks

Lua - идиотский язык

 , ,


2

2

по работе пришлось столкнуться с этим поделием какой-то недоучившийся школоты.

это пипец. спрашиваю многих «почему выбран именно Lua как встраиваемый язык?»

типовые ответы:

  • потому что он самый быстрый, вот дескать бенчмарки
  • потому что его проще всего встроить, вот дескать один хидер и работа со скалярами такая простая

но чухня все это.

любой язык ща встроить в свой код одинаково. что питон что перл.

быстродействие говорите? а чтобы узнать что в ассоциативном массиве есть элемент его надо обойти это быстро? а сконкатенировтаь два массива их опять обойти - снова быстро? а ни одного приличного биндинга к распространенным либам это опять быстро?

то есть что толку с того что десять присвоений быстрее делаются? вы на реальном коде, реальной задаче посмотрите, а там будет медленнее самого медленного языка, ибо в том хоть хеши есть нормальные, массивы.

ну а уж о магии «эта хрень в lua работает вот так вот что волосы дыбом потому что на C было так проще писать» вообще сплошь.

вот например что выводит программа?:

local tbl = { 1, nil, 2 }
print( unpack(tbl) )

правильно, она выводит:

1 nil 2

а вот что выведется в следующих случаях:

local tbl = { nil, 2, 3 }
print( unpack(tbl) )

и

local tbl = { 1, 2, nil }
print( unpack(tbl) )

можете сказать?

и так в lua все.

★★

Последнее исправление: rsync (всего исправлений: 1)
Ответ на: комментарий от AiFiLTr0

Скорее С и java.

Ну, не знаю, я на сях раньше много писал, но никакого баттхерта при виде упорядоченного кода я не вижу :)

Boba_Fett
()
Ответ на: комментарий от PolarFox

С отступами.
C-x-h + C-x-\ же!
Просто частенько надо окружить кусок отлаженного кода скобками, чтобы обернуть после в цикл, и на питоне без хитрой настройки емакса это сделать проблематично. Да и неприятно на такой код смотреть, я привык чтобы скобки лесенкой разноцветной подсвечивались, читать проще.
Да и как-то я обхожусь без питона.
Единственное что делал более или менее большое на питоне - простой парсер для автогенерации какадовских либ, и то только потому что на питоне был готовый парсер кикадовского формата файлов.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от PolarFox

Ээ, уж питона и пёрла там точно не будет

вот контроллеры для устройств вроде преобразователей частоты мы на perl делали (правда там ядро lunux заодно было).

вот чтобы OS не было и скриптовый язык был. не знаю насколько это оправдано. и опять же врядли тут lua зарулит других.

rsync ★★
() автор топика
Ответ на: комментарий от buddhist

Ок, автор говорит что там нет хэшей смотрим:

const TValue *luaH_get (Table *t, const TValue *key) {
  switch (ttype(key)) {
    case LUA_TNIL: return luaO_nilobject;
    case LUA_TSHRSTR: return luaH_getstr(t, rawtsvalue(key));
// ...
  }
}
ttype там полтора дефайна, идем дальше.

#define rawtsvalue(o)	check_exp(ttisstring(o), &val_(o).gc->ts)
#define check_exp(c,e)		(e)

#define ttisstring(o)		checktype((o), LUA_TSTRING)
#define checktype(o,t)		(ttypenv(o) == (t))
#define ttypenv(o)	(novariant(rttype(o)))
#define novariant(x)	((x) & 0x0F)
#define rttype(o)	((o)->tt_)

frozenix ★★★
()
Ответ на: комментарий от PolarFox

Пишешь на C и Java без отступов? Да ты бунтарь

отступы в питоне - тоже тот еще дебилизм. ибо таб и пробелы выглядят одинаково, а разные программисты предпочитают разные символы. одни почему-то писают кипятком от табов, другие от пробелов.

в итоге когда внутри компании применяешь питон и не редактируешь сторонние модули, то можно и питон.

а как возникает необходимость отредактировать чужой питон-код то огрести проблем что где-то Таб будет выглядеть так же как отступ пробелами но реально питон будет о нем думать что это другой блок и ищи баги

rsync ★★
() автор топика
Ответ на: комментарий от AiFiLTr0

Имелось в виду то, что lua вполне себе нормально крутиться на голом железе

Тогда еще непонятнее, причем тут были пых и жаба.

tailgunner ★★★★★
()
Ответ на: комментарий от rsync

Пока тут есть только:
.Net compact фреймворк, но под него надо тоже компилять костылями.
pymite - щупал пару раз, сабсет питона поддерживается очень маленький, непереносимо, тухло.
java - есть реализации наколеночные jvm. работает хреново.
forth - рулит и педалит конечно, но для того, но в нем нет поддержки всей переферии изкоробки, для тех же stm32 а самому уйдет много времени и теряется смысл.
lisp - запускал как-то раз. Прожорливо до памяти вышло, весело, но опять таки, надо все железо подымать самому, смысл теряется.
elua http://elua.org - лютый винрар, дающий терминал, vfs, rpc, полную поддержку железа из скриптовой среды и еще 100500 фичей на девайсе в считанную секунду. просто подрубаем миником, и быстренько щупаем то, что подключили. Убедившись что работает так как надо, вносим в проект изменения, заказываем плату и пишем конечный продукт на сях. Все. И по потреблению памяти уделывает все вышеперечисленное кроме форта.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от rsync

*facepalm* а что вы там ожидали увидеть?

const TValue *luaH_getstr (Table *t, TString *key) {
  Node *n = hashstr(t, key);
  lua_assert(key->tsv.tt == LUA_TSHRSTR);
  do {  /* check whether `key' is somewhere in the chain */
    if (ttisshrstring(gkey(n)) && eqshrstr(rawtsvalue(gkey(n)), key))
      return gval(n);  /* that's it */
    else n = gnext(n);
  } while (n);
  return luaO_nilobject;
}

frozenix ★★★
()
Ответ на: комментарий от rsync

отступы в питоне - тоже тот еще дебилизм

Обычно так говорят те, кто питоном не пользовался.

а как возникает необходимость отредактировать чужой питон-код то огрести проблем что где-то Таб будет выглядеть так же как отступ пробелами но реально питон будет о нем думать что это другой блок и ищи баги

Купи себе приличный редактор.

tailgunner ★★★★★
()
Ответ на: комментарий от rsync

отступы в питоне - тоже тот еще дебилизм. ибо таб и пробелы выглядят одинаково, а разные программисты предпочитают разные символы. одни почему-то писают кипятком от табов, другие от пробелов.

В пеп-8 написано 4 пробела, значит 4 пробела. Я бы на их месте принудительно в питоне 3 сделал бы возможность использовать только 4 пробела.

В go махом решили проблему любителей разных стилей расставления фигурных скобочек, все способы отличные от скобки на той же строке, что и if/for/whatever вызывают ошибку компиляции.

PolarFox ★★★★★
()
Ответ на: комментарий от tailgunner

Пых я рассматривал как вариант для скриптинга самопаек, но не долго и больше потому что имел опыт прибивания к нему libusb. java просто щупал когда интересно было как офлоадить что-то через jni, но на практике юзал ее только для андройда.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от rsync

а как возникает необходимость отредактировать чужой питон-код то огрести проблем что где-то Таб будет выглядеть так же как отступ пробелами но реально питон будет о нем думать что это другой блок и ищи баги

Может пора юзать нормальный редактор для автоподхватывания типа отступов по дефолту? :)

Boba_Fett
()
Ответ на: комментарий от tailgunner

Обычно так говорят те, кто питоном не пользовался.

программировал на нем около 4-5 лет. потом полностью перешел на perl. но старые проекты патчу/поддерживаю. бывает что копаюсь в чужих

Купи себе приличный редактор.

vim - отличный редактор. если автор скрипта поставил коментарий

vim: set noet :
и так далее, то тогда все ок.

но у автора эти строки стоят обычно в его .vimrc. и соответственно тут даже скриптики я писал чтобы сперва анализировало что там и если табы найдены ставило noet и табсайс 8. а иначе et и табсайз 4

rsync ★★
() автор топика
Ответ на: комментарий от rsync

скажем на AVR?

Платить больше денег за меньше фич народ будет разве что в условиях беспощадного vendor lock in.

PolarFox ★★★★★
()
Ответ на: комментарий от rsync

vim - отличный редактор. если автор скрипта поставил коментарий

vim: set noet :

и так далее, то тогда все ок.

Приличные редакторы подхватывают стиль, используемый в файле.

но у автора эти строки стоят обычно в его .vimrc

...наверное, автор сам себе враг.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Приличные редакторы подхватывают стиль, используемый в файле

это невозможно. некоторые используют табы, но при этом табсайз делают равным 4 а не 8. в итоге «подхват» стиля выливается в этакую эвристику

наверное, автор сам себе враг.

мало кто вообще задумывается над тем чтобы его код мог комфортно редактировать кто-то другой.

авторы lua например совсем не думали о комфорте тех кто будет их г*ноподелием пользоваться.

rsync ★★
() автор топика
Ответ на: комментарий от PolarFox

В том, что применение бэйсика корне не верно, про это небезызвестные лица еще цать лет назад аргументированно высказались. А писать «программы» под всякие акцессы - это вообще фундаментальная ошибка в голове программиста. Про это Столлман много чего расскажет.

Siado ★★★★★
()
Ответ на: комментарий от frozenix

А от самого-то чего ожидать, если на прямой вопрос ответить не дееспособен? =)

Siado ★★★★★
()
Ответ на: комментарий от rsync

elua я на stm32 пользую, есть порты на stellaris. Но руки не доходят пускануть на evalbot'е.
На авр только Forth и подойдет.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от PolarFox

Платить больше денег за меньше фич народ будет разве что в условиях беспощадного vendor lock in.

Ну и еще из-за поддержки старого кода. Но attiny2313 до сих пор самый дешевый мк с усб (ну что, шо ногодрыгом?)

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от rsync

авторы lua например совсем не думали о комфорте тех кто будет их г*ноподелием пользоваться.

Успокойся наконец. Вме поняли, что у тебя от lua мозг закоротил. В условия такого баттхёрта единственный выход - написать разработчикам о проблемах луа, чтобы они знали. И они дадут обязательно дельный совет и исправлят ошибки.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от rsync

некоторые используют табы, но при этом табсайз делают равным 4 а не 8. в итоге «подхват» стиля выливается в этакую эвристику

М? Сам Python меняет табы на пробелы так, что таб всегда продвигал курсор к позиции, кратной 8 символам. В чем проблема?

мало кто вообще задумывается над тем чтобы его код мог комфортно редактировать кто-то другой.

Но ты, похоже, стараешься затруднить другим эту задачу %)

tailgunner ★★★★★
()
Ответ на: комментарий от rsync

а в таблице tbl = { a = 1, b = nil, c = 2 } он отсутствует или присутствует? :lol:

Элемент с индексом 2? Отсутствует. Элемент с индексом в виде строки «b», кстати, тоже. Между отсутствующим и равным nil нет разницы. Наверное.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Внутри он все равно просматривает все элементы.

Можно подумать, что внутрях питона при конкатенации этого не происходит.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Можно подумать, что внутрях питона при конкатенации этого не происходит.

Вот и я о том же.

proud_anon ★★★★★
()
Ответ на: комментарий от PolarFox

Ардуйна и нихрена не компилятор.
«Aduino programming language» это на самом деле С++ классы с достаточно кривым и тормознутым API поверх регистров мк.
Собирается все обычным avr-gcc и прошивается дудкой.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от PolarFox

Я тебя расстрою, но из-за качественного и продуманного кода даже такое простое действие, как digitalWrite (это у них для выставления значения gpio) в 500-600 раз медленнее, чем обычное PORTD|=1<<5;
(Да, прежде чем обсирать ардуйну я потыкал ее палочкой как следует) А пишешь ты ее так же, как и компилируемый код.

AiFiLTr0 ★★★★★
()
Последнее исправление: AiFiLTr0 (всего исправлений: 1)
Ответ на: комментарий от AiFiLTr0

Главная выгода от elua - инициализировать железку, догнать ее по флоу до момента, когда нужна отладка, а дальше ручками интерактивно потыкать. В ардуйно такое только если на ходу делать парсер входных данных у уарта.

AiFiLTr0 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.