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)

Ответ на: комментарий от rsync

симптоматично, что заговорили про js
оба языка зачастую форсятся не по назначению и не теми людьми

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

Почему? Будет много весить? Неверное рассуждение.

нет, потому-что:

«warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking», аналогично getpwuid и т.д., итого никто не гарантирует, что твоя программа будет работать корректно где либо еще

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

Что ж теперь, если разработчики софта руководствовались только им понятными идеями, теперь вопросы нельзя задавать?

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

вопросы нельзя задавать?

Вопросы задавать можно. Но ты же не задаешь вопросы, а вещаешь о том, как плоха динамическая линковка (точнее, копипастишь придурочный harmful.cat-v).

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

ты так говоришь будто собираешь весь софт с чем-то другим

Не, я жру что дают (-:

PolarFox ★★★★★
()

сконкатенировтаь

Чего-чего?

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

встраивается в С элементарно

безотносительно guile обо всех приведённых в треде примеров «встраивания» чего-либо в С: встраивание это не только возможность вызова функции интерпретатора, но и разделение данных. То есть из С доступ к переменным скрипта, из скрипта вызов избранных C-шных функций и опять-же доступ к данным. Как только встраивание переходит границу «это можно сделать через exec», начинаются пляски с бубнами :) потом выясняется что надо ещё как-то контролировать использование ресурсов встроенным интерпретатором - чтобы он не отожрал слишком памяти/ЦП, зацикленные/зависшие скрипты можно было диагностировать и «убивать» по таймеру и так далее.

это я к тому, что язык имеющий возможность встраивания и язык предназначенный/спроектированный для встраивания - это две большие разницы. Тех.требования разные. Сравнение LUA vs GUILE вообще ни о чём - сравнение кислого с мягким.

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

Ну хорошо, безотносительно динамической линковки, зачем kolourpaint в конечном итоге нужен вебкит? А фонон?

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

безотносительно динамической линковки, зачем kolourpaint в конечном итоге нужен вебкит? А фонон?

Не знаю. И, в отличие от тебя, не берусь судить о том, чего не знаю.

tailgunner ★★★★★
()

Да, а еще переменные по умлочанию глобальный. Это ужас.

// Самому приходится работать с этим поделием.

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

язык имеющий возможность встраивания и язык предназначенный/спроектированный для встраивания - это две большие разницы.

guile --- официальный язык расширений GNU, если чо.

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

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

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

это я к тому, что язык имеющий возможность встраивания и язык предназначенный/спроектированный для встраивания - это две большие разницы. Тех.требования разные. Сравнение LUA vs GUILE вообще ни о чём - сравнение кислого с мягким.

что в lua что скажем в perl XS ты на C один фиг вызываешь функции и составляешь скаляры. разделяемые данные между одним и другим организуются только на базе составления тех скаляров.

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

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

И кто запрещает использовать uClibc ? Там есть свои проблемы, но данное сообщение лишь доказывает, что glibc уже не торт. Более того, такой проблемы нет даже в их форке - eglibc. Такой проблемы не должно быть и в newlib (не проверял). Вообще, писать что-то embed-based aka статичные приложение с glibc это дорога в ад.

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

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

ага отсутствующий, расскажи еще сказочку

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

с трех попыток угадай сколько напечатает?

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

И кто запрещает использовать uClibc ?

ее ограниченность, там много чего просто не реализовано

такой проблемы нет даже в их форке - eglibc

есть

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

Читайте, Ахэр, Талмуд поприлежней

Поведение оператора # на таблицах с дырами специально оговорено. Стандартный интерпретатор скорее всего напечатает 3 в обоих случаях, но вообще Lua 5.1 имеет право вывести в первом случае 1, а в Lua 5.2 «#» на таблицах с дырами не определен.

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

И вообще, не ты ведь первый, не ты последний: http://www.luafaq.org/gotchas.html

proud_anon ★★★★★
()

А про LISP вы забыли? Знаю одну игрушку, под названием Transcendence. Там скрипты миссий(и не только) на LISP написаны.

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

Вот так вот, виндовый dll-hell в линуксе был выведен на новый уровень — dependency hell.

Только в отличии от винды в Linux эти зависимости сами собой поставятся, а когда ты удалишь ту программу удалятся. То есть без особой нужды можно вообще ничего не трогать, если не тулкитофоб.

KivApple ★★★★★
()

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

Ну-ну.

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

Вот у меня прямо сейчас ситуация. Ffmpeg в дистре мало того, что не самый новый, дак упоротый мейнтейнер наложил патч, с которым ffmpeg говорит, что он deprecated, что ложь, звездёш и провокация.

Поставил репу с ванильным и новым ффмпегом, оттуда в качестве зависимости приплыл libavcodec версии 6, в то время как в системе использовалась версия 4.

Теперь у меня не ставится gstreamer-ffmpeg, который хочет 4 версию libavcodec. Из-за этого плеер музыки ругается на форматы отличные от mp3 и flac, тотем вообще ничего не играет, ну и в браузере не играют кодеки вроде квиктайма.

Можно, конечно, удалить репу и откатить libavcodec, но синаптик грозится при этом удалить xbmc, ffmpeg, vlc и ещё кучу всего по мелочи. В принципе не жалко, могу заново поставить, но блин. В винде я бы просто поставил всё в разные папки и никакого dependency hell бы не было.

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

Ну... пока ты не поставил в стабильный (или в какой ветке такой древний ffmpeg?) Debian, всё было хорошо. Проблемы начались из-за попытки обновить кусочек системы, оставив древней все остальные части.

Просто надо выбирать дистрибутив (или ветку обновления дистрибутива), чтобы время выпуска всех пакетов было подходящее.

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

А если я хочу обновлять не всё подряд, а только определённые программы? В линуксах с этим туговато.

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

нет чтоты, лучше пусть за этим всем следит тупой сборщик мусора, который будет вычищать всё через полчаса работы, от чего hello world будет жрать память как не в себя из-за кодера, который считает что освобождать руками память - моветон

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