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)
Ответ на: комментарий от PolarFox

Ну используй питон или пёрл, кто мешает?

к сожалению жизнь более сложна чем хочется :)

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

С точки зрения интерпретатора во имя оптимизации может и создаёт, а с точки зрения спеков языка обе таблицы в принципе идентичны.

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

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

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

массив - array['something'] = true и у вас будет быстрый поиск элемента

внутрях все равно не хеш, а обход циклом

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

Нет, просто набор инструментов явно не совсем тот, что подходит для решения этой задачи.

//Тогда уж и компиляцию сишного кода чем-нибудь вроде tcc следовало рассмотреть.

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

на реальных приложениях нет.

define реальное приложение. Взять овер9к stm32 и быстрым апи на них наскриптовать умный дом это тоже вполне себе реальное приложение языка.

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

К слову отчасти потому что в питоне не нужно ходить циклами по массивам чтобы их поклеить он и прожорлив.

на аналогичных задачах он не будет более прожорлив чем lua. когда вам на lua понадобится взять например XML или JSON и проапдейтить его, то на питоне у вас будет биндинг к C-шной либе, а на lua вы пойдете в гугл и найдете массу велосипедов которые регекспами регекспами... и тогда вы будете стоять перед дилеммой: либо мириться с херовой производительностью lua, либо брать и ваять биндинги к либе (что по трудозатратам бывает соизмеримо с написанием этой либы) и переписывать их когда выйдет очередной минорный релиз lua несовместимый с предыдущим

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

Ну используй питон или пёрл, кто мешает?

да что тут непонятного, начальник ему сказал: «делаем на луа». Но сказать начальнику свое личное мнение о языке ТС сцыт, потому создает тред на ЛОРе.

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

нормальному человеку не прийдет такое в голову... foo{arg1 = nil, arg2 = 3, arg3 = «ass»}

не знающему ничего кроме убогого поделия школоты? разумеется

rsync ★★
() автор топика

У меня луа в фотике. А вообще надо юзать жабу :D

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

А чего такого. Сесть и сравнить на простом тест кейзе разные инструменты

Выбор инструментов смешной и мотивы выбора тоже.

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

Чёрная магия какая-то.

почему?

у тебя есть функция которая вычисляет сумму своих аргументов.

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

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

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

то на питоне у вас будет биндинг к C-шной либе, а на lua вы пойдете в гугл и найдете массу велосипедов которые регекспами регекспами...

Если так сделаешь ты, это не значит что другие не возьмут биндинг lua к libxml.
Например вот этот:
http://monday.sourceforge.net/tools/build/lua-libxml-project.html

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

Эта твоя проблема оттого, что ты никак не возьмешь в голову, что в Lua элемент, равный nil, то же, что отсутствующий

я специально приводил пример с

tbl = { 1, nil, 2 }

из которого хорошо очень видно что элемент nil отнюдь не отсутствующий

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

В языке, основная ниша которого — код уровня if экспа > pow(1.5, лвл)*10 then левелап() end, отсутствие парсеров xml и json — не недостаток. Этим должно заниматься приложение, в которое lua встроен.

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

пфф не нужно только свою тупость на авторов языка кидать. Ваше незнание языка это не проблема авторов.

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

Выбор инструментов смешной и мотивы выбора тоже.

Не кури больше. А то тебе все смешным будет казаться. На тот момент когда меня интересовало то, как разные языки интерфейсятся с сишным кодом я взял то, что было под рукой и имело распространение.
То что я выбираю и для каких задач можешь посмотреть тут: http://github.com/nekromant
Ты волен выбирать для того, что делаешь ты то, что тебе нравится.

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

из которого хорошо очень видно что элемент nil отнюдь не отсутствующий

Просто в этой таблице присутствует 3-й элемент. Соответственно, максимальный числовой индекс - 3 и при обходе от первого элемента до максимального второй тоже проявится. Если сделать tbl[3] = nil, то в ней останется один элемент.

Извините, вынужден отойти временно от участия в холиваре, вернусь страниц через 10... наверное.

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

Например вот этот

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

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

если непредсказуемый результат подходит то почему бы и нет?

В каком смысле он непредсказуемый? Если твои записи в таблицу носят непредсказуемый характер, то результат, конечно, будет непредсказуемый. Если тебе надо отфильтровывать nil или еще что-то, то обходи таблицу сам - все равно без обхода нельзя сконкатенировать.

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

и при обходе от первого элемента до максимального второй тоже проявится

это как раз утверждавшим что таблицы в lua работают одинакоГо для всех случаев

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

все равно без обхода нельзя сконкатенировать.

дык я и говорю - ацтой

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

Ты про JSON? Пожалуйста, выбирай: http://lua-users.org/wiki/JsonModules
есть на С, есть на чистом lua. Ежели юзать luajit то pure lua модули будут не сильно уступать по производительности нативным.

Короче, надоело, либо заткнись и осваивай нормально lua, либо скажи все это открыто начальнику, стукни кулаком по столу и уволься.

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

В каком смысле он непредсказуемый?

в смысле логики работы. конечно есть язык брейнфак. и в нем есть какая-то логика. но кто на нем пишет что-то серьезное?

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

Не кури больше. А то тебе все смешным будет казаться.

Попробуй взглянуть на ситуацию со стороны %)

То что я выбираю и для каких задач можешь посмотреть тут: http://github.com/nekromant

Ну вот я вижу lualibusb. Получается, что ты написал для lua биндинг к libusb? «Остановился на lua как на единственном языке, где это сделано вменяемо» - имеется в виду «сделал сам на Lua, и на этом остановился»?

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

Ты про JSON?

с XML не вышло пошел по json поискать? да с json один модуль есть. с набором ограничений (вот в части тех же nil в таблицах которые будут теряться на преобразованиях туда-сюда, а так же с допущениями не кодировать ничего кроме utf8) его можно поюзать.

и вот даже его возьмешь сравнишь скажем с JSON::XS перла, получишь что не бенчмаркает lua, не бенчмаркает.

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

Короче, надоело, либо заткнись и осваивай нормально lua, либо скажи все это открыто начальнику, стукни кулаком по столу и уволься.

там где я применяю lua я сам себе начальник :)

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

это как раз утверждавшим что таблицы в lua работают одинакоГо для всех случаев

Ну хорошо, поясню мысль.

а)В таблице tbl = {1, nil, 2} отсутствует элемент 2 - ну или, можно сказать, равен nil. Поэтому tbl[2] == nil. Еще в ней отсутствует элемент «кошка», поэтому tbl[«кошка»] == nil.
б)unpack(tbl) выдаст все элементы с числовыми индексами от 1 до такого, что после него нет ни одного элемента. Поэтому да, оно выдаст элемент 2, хотя он и равен nil.
в)Вызов foobar(1, 2) эквивалентен foobar(1, 2, nil, nil, nil)

все равно без обхода нельзя сконкатенировать.

дык я и говорю - ацтой

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

//Да, все, все, ухожу

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

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

Эм, lua? table.concat

frozenix ★★★
()

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

nil 1 2

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

Осильте списки.

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

нет я взял готовый. Только форканул к себе и добавил пару констант.

Остановился на lua как на единственном языке, где это сделано вменяемо

Тут должен извиниться, ибо отвлекали от холивара. Имелось в виду то, что lua вполне себе нормально крутиться на голом железе и на нем ВМЕНЯЕМО и быстро можно пощупать ту или иную железку на макетке.

To sum up: я юзаю луа для
* скриптинга самопаек через lualibusb ( https://github.com/nekromant/lunartool )
* Прототипирования на макетках через elua ( http://elua.org )
* Кастомные приложения для Luci в OpenWRT.
* Скриптинга простого OpenGL view'ера разделяемой памяти, куда пишет вериложная модель.

Для всего вышеуказанного lua себя зарекомендовал как очень удобный язык. Для другой задачи я бы выбрал, возможно, что-то другое.

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

В таблице tbl = {1, nil, 2} отсутствует элемент 2 - ну или, можно сказать, равен nil

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

Вызов foobar(1, 2) эквивалентен foobar(1, 2, nil, nil, nil)

дык я говорю. на костылях ходящее поделие сделанное недоучками

rsync ★★
() автор топика

Используем lua для скриптования отладки в SerialICE. Есть свои острые углы и недоработки, но для своих задач он подходит идеально. При этом для более сложных задач предпочитаю использовать python.

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

Простите, мы говорим о том языке, в котором, разрабатывая в XXI-ом веке очередной аудиоплеер или браузер, я должен ручками следить за памятью, обеспечивая свою багзиллу тикетами на пару лет вперед?

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

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

дык Perl

$a = 1 . 'abc'
[/perl]
rsync ★★
() автор топика
Ответ на: комментарий от PolarFox

Мыши, слёзы, кактус?

почти да. отсюда и тред

rsync ★★
() автор топика

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

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

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

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

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

почему не в development?

оттуда вынесут, а настроение почему-то пятничное

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