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

тем кто тащатся от пробелов надо каждую пятницу ставить в емаксе 12пробеловый таб

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

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

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

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

а где это поведение непредсказуемое? tbl же у тебя не является списком, а является просто множеством с неустановленным отношением порядка.

dikiy ★★☆☆☆
()

В луа гото добавили, поэтому он практичнее питона.

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

Парень. Никогда встраиванием чего-то в Цэ не занимался, но первый же найденный в гугле пример взлетел через 5-10 минут чтения как эта фигня работает.

main.c

#include <stdio.h>
#include <libguile.h>

int main( int argc, char **arg )
{
  SCM func;
  scm_init_guile();
  scm_c_primitive_load( "script.scm" );
  func = scm_variable_ref( scm_c_lookup( "simple-script" ) );
  scm_call_0( func );
  return 0;
}

script.scm

(define simple-script
  (lambda ()
    (display "script called") (newline)))

Makefile


CFLAGS = `guile-config compile`
LIBS = `guile-config link`

.PHONY: clean build run

build: main

clean:
	rm -f main main.o

run: main
	./main

main: main.o
	gcc $< -o $@ $(LIBS)

main.o: main.c
	gcc -c $< -o $@ $(CFLAGS)

результат

~/project/guile $ make
gcc -c main.c -o main.o `guile-config compile`
gcc main.o -o main `guile-config link`
~/project/guile $ ./main
script called

Так что следует заклчить: guile встраивается в С элементарно.

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

mikroPascal, mikroBasic for PIC, AVR, 8051, ARM.

ааа, как страшно жЫть!

Eddy_Em ☆☆☆☆☆
()

Почему сразу идиотский? Для коньков очень даже нормальный язык :)

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

первый же найденный в гугле пример взлетел через 5-10 минут чтения как эта фигня работает.

+1

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

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

а вот таскается с собой со всеми зависимостями - нет, в отличие от lua, который занимает 160Кб при статичной линковке

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

а) не считаю это проблемой;

б) в теме не компетентен, может есть какие-то пути обхода, не знаю.

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

Так что следует заклчить: guile встраивается в С элементарно.

...но с некоторыми идиосинкразиями - ЕМНИП, у него целые числа меньше 32-х разрядов. Думаю, это ставит крест на его использовании в задачах скриптования железа.

tailgunner ★★★★★
()

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

http://en.wikipedia.org/wiki/Category:Lua-scripted_video_games

P.S. Angry Birds тоже, так что советую удалить все копии игрушки, если есть, в знак ненависти к Lua.

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

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

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

статическая линковка - зло

зло - безосновательные категоричные заявления, не в каждом дистрибутиве (и его релизе) может оказаться именно нужная версия библиотеки, значит для своих билдов надо все-равно таскать с собой некоторые библиотеки, например тот же lua 5.2, а теперь расскажи чем .so файл в этом случае будет лучше чем статичная линковка с -flto? чем хуже - думаю очевидно

wota ★★
()

это то убожество, которое используется школотой для wow?

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

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

Апелляция к массовости использования на сайте, посвященном Linux, просто смешна %)

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

lisp - запускал как-то раз. Прожорливо до памяти вышло

Реализация какая?

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

Angry Birds тоже, так что советую удалить все копии игрушки, если есть

поискал на своем компе эту игрушку. не нашел

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

зло - безосновательные категоричные заявления, не в каждом дистрибутиве (и его релизе) может оказаться именно нужная версия библиотеки

напишите RFP, майнтенеры добавят

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

майнтенеры добавят

«задним числом» их никто не добавит в CentOS 5, debian 5, ubuntu 10.04 etc., да и говорить людям - извините, но вам надо обновиться на самую последнюю версию ОС, или найти ментейнера, который добавит нужные библиотеки, это несерьезно, никто не будет даже пробовать такой софт, кроме красноглазиков, которые сидят на альфах/бетах и сами себе компиляют свежий софт

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

не в каждом дистрибутиве (и его релизе) может оказаться именно нужная версия библиотеки

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

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

задним числом" их никто не добавит в CentOS 5, debian 5, ubuntu 10.04 etc.,

центос давно надо закопать.

а вот в Debian есть бакпортс, попросите майнтенеров добавить либу в бакпортс. чего проще?

никто не будет даже пробовать такой софт, кроме красноглазиков

венда - ваш выбор.

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

на этом утверждении построена вендовс. там вам будет хорошо

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

там каждая программа тащит все с собой и зависимости

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

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

центос давно надо закопать.

понятно - ты просто диванный теоретик

а вот в Debian есть бакпортс, попросите майнтенеров добавить либу в бакпортс. чего проще?

я тебя удивлю в очередной раз, но debian 5 RIP, включая репозитории, а вот пользователи на нем еще есть

венда - ваш выбор.

спасибо - я уже сделал свой выбор, он отличается от твоего

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

Use archive.debian.org, Luke.

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

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

я тебя удивлю в очередной раз, но debian 5 RIP, включая репозитории

репозитории въехали в архив просто.

PS: а что, так сильно наговнокодили что нельзя дистрибутив сапгрейдить до свежего стейбла?

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

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

ты не с той стороны смотришь, я как раз красноглазю и сижу на альфах/бетах, а почему вспомнил про debian 5 - с неделю назад у нас один клиент «постучался» именно с ним, почему именно пятый - расспрашивать не стал

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

С тем же успехом можно и просто интерпретатор запустить из-под сишного кода.

Вот примеры встраивания Lua:

Да, питон и прочее тоже можно встроить, но это обычно выходит посложнее, чем с lua.

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

С тем же успехом можно и просто интерпретатор запустить из-под сишного кода.

не-а, покури доки по guile, он гораздо больше, чем просто вызов интерпретатора.

Учитывая возможность (со второй версии) писать не только на scheme (в коробке elisp и js) вообще непонятно, нафига нужно что-то ещё?

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

статическая линковка - зло

Динамическая линковка — предоставление возможности третьим лицам сломать твой код.

Динамическая линковка сложнее устроена.

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

Из-за динамической линковки авторы многих программ забывают, что если они делают #include хидера какого-нибудь дерьма (или иным образом становятся в зависимость от чужого кода), то это дерьмо становится неотъемлемой частью их проекта и теперь они в любом случае должны таскать это дерьмо за собой.

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

предоставление возможности третьим лицам сломать твой код.

это и так возможно, хотя бы через LD_PRELOAD

сложнее устроена.

nobody cares

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

некритично

Из-за динамической линковки авторы многих программ забывают

их личные проблемы с их памятью

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

ПЫЩПЫЩСКОБОЧКИ

будто что-то плохое

а js от lua отличается по сути только использованием символа } вместо end.

вряд ли только этим

Опять же, фигня в том, что в guile можно реализовать скриптинг и на lua, никаких проблем.

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

это и так возможно, хотя бы через LD_PRELOAD

Так LD_PRELOAD это как раз что? Это динамическая линковка.

некритично

Именно поэтому при попытке установить клон пейнта kolourpaint в свою уютненькую убунту я получаю в ответ то, что на диске будет занято 140 метров. На сраный клон пейнтбраша. Да такой херни даже в венде нету.

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

js от lua отличается по сути только использованием символа } вместо end

в js есть нормальные массивы

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

140 метров. На сраный клон пейнтбраша

в венде для того же пейнтбраша существенно больше заранее поставлено.

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

в js есть нормальные массивы

В нём полно других wtf. Например операторы == и ===, первый из которых не коммутативен.

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

Так LD_PRELOAD это как раз что? Это динамическая линковка.

да, но никто же не запрещает подсунуть свой gettimeofday, например

Именно поэтому при попытке установить клон пейнта kolourpaint в свою уютненькую убунту я получаю в ответ то, что на диске будет занято 140 метров.

там одни только иконки oxygen 30Мб весят + по сути ставится ядро KDE, т.е. вопрос зависимостей на уровне пакетов, а не кода, ну и ради того, чтоб один раз отложить установку этих 140Мб, сейчас я думаю напрягаться не имеет смысла

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

да, но никто же не запрещает подсунуть свой gettimeofday, например

Каким образом, если код собран статически?

там одни только иконки oxygen 30Мб весят

У меня уже есть иконки. И пейнту много своих иконок не надо.

по сути ставится ядро KDE

В списке зависимостей я заметил phonon. Нахрена эта мультимедиаигралка пейнтбрашу? Ещё я там заметил что-то связанное с вебкитом. Нафига графическому редактору браузер?

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

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

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

Все это прекраснейшим образом возможно, Sublime, например, так и делает — определяет отступы автоматически при открытии файла.

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

Каким образом, если код собран статически?

статично линковать libc - плохая идея, ровно как и статично линковать иксовые библиотеки, например

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

статично линковать libc - плохая идея, ровно как и статично линковать иксовые библиотеки, например

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

Вспомним об уберфиче статической линковки — отбрасывание неиспользуемых функций в библиотеке. А специфика как раз именно libc и xlib такова, что функции в них в большинстве своём вполне независимы друг от друга.

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

в js есть нормальные массивы

В нём полно других wtf. Например операторы == и ===, первый из которых не коммутативен.

Лолшто?

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

Лолшто?

Прошу прощения, не транзитивен.

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true
PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

В списке зависимостей я заметил phonon. Нахрена эта мультимедиаигралка пейнтбрашу? Ещё я там заметил что-то связанное с вебкитом. Нафига графическому редактору браузер?

То есть ответов на свои вопросы ты, по сути, не знаешь. Но мнение имеешь.

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