avva: (moose)
[personal profile] avva
Lua: Good, bad, and ugly parts (есть также обсуждение на HN)

Отличный обзор языка Lua, с подробными списками хорошего/плохого в нем, с которыми я согласен процентов на 80. Рекомендуется всем, кто хоть немного знает этот язык хотя бы на уровне простейших программ; те, кто не знают совсем, тоже, конечно, могут прочитать, но все-таки адекватное впечатление о языке из этих списков не составить.

Я люблю Lua за его элегантность, концептуальную простоту, синтаксис, который легко запомнить и, как бы это сказать, easy on the eyes. Lua примерно соответствует по возможностям и устройству языка Джаваскрипту, и при этом лучше его почти во всем. Гипотетический мир, в котором языком веба вместо JS является Lua, очень хорош; увы, это нереальные мечты.

В последнее время я пробовал писать небольшие скрипты для всяких мелких нужд, или очень простые прототипы, на Lua (вместо Питона). Не всегда это хорошо получается. Три главных вещи, которых мне не хватало в таких случаях в Lua, были: 1) поддержка Юникода; 2) удобная поддержка регулярных выражений; 3) list comprehension.

Эти проблемы решаются при желании, но я не углублялся в Lua (или Metalua) настолько далеко, чтобы их решать. Кроме того, я не могу рекомендовать Lua для больших проектов, скажем, больше 5000 строк (может, он и хорошо подходит для них; не знаю, сомневаюсь, и в любом случае нет своего опыта такого рода). Но ознакомиться с ним в любом случае дело полезное, по-моему.

Date: 2013-03-11 12:36 am (UTC)
From: [identity profile] amosk.livejournal.com
Смешное:
"No continue statement"
зато
"a goto statement introduced in Lua 5.2".

Date: 2013-03-11 01:09 am (UTC)
From: [identity profile] avnik.livejournal.com
Меня в луа бесят две вещи -- нумерация "списков" (на самом деле таблиц с индексами конечно) с единицы. Просто потому, что про эту особенность надо всегда помнить.

Вторая -- больные на голову регулярные выражения. Потому что если в перле/питоне/руби/JS пишутся практически "на рефлексах" -- там надо включать мозг и думать над каждой буквой даже в тривиальных случаях. (И это портит те самые рефлексы увы -- покопавшись неделю в луа коде -- начинаешь спотыкаться об regexps в других языках)

PS Меня по аналогичной причине бесит format в лиспообразных и ерланге -- самостийностью.

Date: 2013-03-17 06:58 pm (UTC)
From: [identity profile] ltwood.livejournal.com
Интерферения в голове между lua-re и pcre конечно страшная и постоянно мешает, но нельзя не отдать должно тому, что в lua регулярные выражения действительно хорошо продуманы. Например, в них нет бешеной путаницы с тем, включает или выключает бэкслэш специальный смысла символа. Ну и правило "любой небуквенный символ можно заэкранировать символом %" (независимо от того, имеет ли этот символ в данном контексте специальный смысл) - это же просто праздник.

Date: 2013-03-11 02:52 am (UTC)
From: [identity profile] agroznov.livejournal.com
Насчет больших проектов: когда я работал в геймдеве в середине 2000х - у нас практически весь AI (и не только) был написан на Lua. Это сильно больше 5000 строк кода :)
Да ладно мы, местечковые российские геймдевелоперы; Far Cry and World of Warcraft тоже Lua использовали.

Date: 2013-03-11 12:36 pm (UTC)
From: [identity profile] plakhov.livejournal.com
А где вы работали в российском геймдеве в середине нулевых? Интересно. (Я тоже).

(no subject)

From: [identity profile] agroznov.livejournal.com - Date: 2013-03-11 06:19 pm (UTC) - Expand

Date: 2013-03-12 09:35 am (UTC)
From: [identity profile] theaspect.livejournal.com
Tales of Maj'Eyal and T-Engine4 тоже написан на Lua

Date: 2013-03-11 03:36 am (UTC)
From: [identity profile] potan.livejournal.com
Когда смотрел на Lua, понял, что не люблю языков, в которых в конце функции надо писать return.

Date: 2013-03-11 07:33 am (UTC)
From: [identity profile] vesch9.livejournal.com
Так в Lua и не надо. Return необязателен, но, если есть, должен быть последним оператором в блоке.

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-11 08:13 am (UTC) - Expand

(no subject)

From: [identity profile] vesch9.livejournal.com - Date: 2013-03-11 08:17 am (UTC) - Expand

И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-11 08:22 am (UTC) - Expand

Re: И где?

From: [identity profile] vesch9.livejournal.com - Date: 2013-03-11 08:32 am (UTC) - Expand

Re: И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-11 08:39 am (UTC) - Expand

Re: И где?

From: [identity profile] vesch9.livejournal.com - Date: 2013-03-11 08:54 am (UTC) - Expand

Re: И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-11 09:22 am (UTC) - Expand

Re: И где?

From: [identity profile] migmit.livejournal.com - Date: 2013-03-11 07:25 pm (UTC) - Expand

Re: И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 03:24 am (UTC) - Expand

Re: И где?

From: [identity profile] migmit.livejournal.com - Date: 2013-03-12 04:22 am (UTC) - Expand

Re: И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 06:24 am (UTC) - Expand

Re: И где?

From: [identity profile] migmit.livejournal.com - Date: 2013-03-12 06:36 am (UTC) - Expand

Re: И где?

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 06:42 am (UTC) - Expand

Re: И где?

From: [identity profile] migmit.livejournal.com - Date: 2013-03-12 06:51 am (UTC) - Expand

Date: 2013-03-11 06:00 am (UTC)
From: [identity profile] drontik.livejournal.com
Практически везде, где хорош Lua, Squirrel (http://www.squirrel-lang.org/) ещё лучше. Он очень похож по внутреннему устройству (собственно, он и основан на Lua, автор это упоминает), но лишён многих недостатков из перечисленных по ссылке.

Date: 2013-03-11 07:35 am (UTC)
From: [identity profile] vesch9.livejournal.com
Есть еще Moonscript (http://moonscript.org/), который комплируется в Lua

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-11 08:33 am (UTC) - Expand

Date: 2013-03-11 08:19 am (UTC)
From: [identity profile] potan.livejournal.com
Только apt-get про него ни чего не знает...
И, судя по документации, return в конце функции так же нужен.

Date: 2013-03-11 08:58 am (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Судя по списку bad и ugly parts — ужас, летящий на крыльях ночи. Не могу себе представить, каки достоинства могут все это компенсировать. Попробовать, что ли?

Date: 2013-03-11 09:58 am (UTC)
From: [identity profile] cmm.livejournal.com
я пробовал по мелочи (конфиги Awesome курочил), как-то не покатило.
та же изуродованная Схема что и JS, только изуродована слегка по другому и в геймдеве популярна.
(индексация с единицы у них "Different", мой осёл.)

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2013-03-11 07:26 pm (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 03:28 am (UTC) - Expand

Date: 2013-03-11 07:46 pm (UTC)
From: [identity profile] migmit.livejournal.com
Гм... я прочитал обе части и не вижу там такого уж сурового криминала.

не в тему, но ...

Date: 2013-03-11 09:22 am (UTC)
From: [identity profile] michael moser (from livejournal.com)
Кстати. я сделал язык программирования с похожим синтаксисом; но с большей типизацией ( как Perl strict mode ).
Проект вот тут вот

http://mosermichael.github.com/cstuff/all/pooh-lan/2012/12/11/pooh-intro.html

( не доделан но идет уже куда то).
Еще он может писать логи/трейсы как BASH с опцией set -x ...
Моя давняя мечта идиота.

Date: 2013-03-11 10:18 am (UTC)
From: [identity profile] ztarlitz.livejournal.com
э.. а где оно применяется кроме world of warcraft? это кажется единственная программа под которую я что-то писал на этом языке.

Date: 2013-03-11 10:21 am (UTC)
From: [identity profile] pphantom.livejournal.com
Lua действительно очень неплох в качестве скриптового языка "общего назначения", а это достаточно обширная область применения.

Date: 2013-03-11 10:53 am (UTC)
From: [identity profile] onodera.livejournal.com
Ну, компании, желающие сохранить инкогнито, перечисляют разработчику LuaJIT определённые деньги за реализацию нужных им фич, так что он явно ими применяется.

Date: 2013-03-11 01:13 pm (UTC)
From: [identity profile] begemotv2718.livejournal.com
Насчет больших проектов -- не знаю. А вот в личном арсенале -- незаменимая вещь, когда нужен продвинутый конфигурационный файл или интерфейс командной строки для своего приложения.

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 03:31 am (UTC) - Expand

Date: 2013-03-11 12:31 pm (UTC)
From: [identity profile] emdin.livejournal.com
У lua огромное преимущество -- small footprint. Мы как-то делали gui для embedded firewall, коробочка с 128MB памяти. Пришлось на lua писать весь API (и ORM). Ад, но зато всё летало. Ничего другого в такой объём памяти не запихнёшь.

Date: 2013-03-11 01:16 pm (UTC)
From: [identity profile] cmm.livejournal.com
GUI на C или C++ запихнёшь (и я видел как это делают), но это тоже ад.

(no subject)

From: [identity profile] emdin.livejournal.com - Date: 2013-03-11 01:28 pm (UTC) - Expand

trivia

Date: 2013-03-11 12:43 pm (UTC)
From: [identity profile] michael moser (from livejournal.com)
Не знаю чего они там курят, но очень интересно что язык (интерпретатор !!!) включен в ЯДРО операционной системы NetBSD

http://people.freebsd.org/~pgj/bsd_day(2011)/materials/04_mbalmer_kernel_lua.pdf

http://bsd.slashdot.org/story/13/02/16/2329259/netbsd-to-support-kernel-development-in-lua-scripting

Date: 2013-03-11 03:49 pm (UTC)
From: [identity profile] igoretz.livejournal.com
Про Lua vs. JS абсолютно согласен.

Очень нравится нумерация с 1, а не с 0, как и должно быть везде, кроме (макро)ассемблера.

Регекспы можно pcre подключить, кроме того есть великолепный lpeg и lpeg/re.

Да, в metalua есть и list comprehension, и pattern matching, и абстрактные типы данных.

Сопрограммы там мощнее питоновских, Роберто писал, что по мощности как cоntinuations.

Без юникода, да, плохо.

Date: 2013-03-11 05:08 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Должно? Ну не мне во всяком случае. Не припоминаю такого должка ни за кем...

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 03:33 am (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 05:11 am (UTC) - Expand

(no subject)

From: [identity profile] potan.livejournal.com - Date: 2013-03-12 06:16 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2013-03-12 07:07 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2013-03-12 06:53 am (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 01:53 pm (UTC) - Expand

(no subject)

From: [identity profile] migmit.livejournal.com - Date: 2013-03-12 02:33 pm (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 06:29 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-12 05:43 pm (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 06:34 pm (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 06:51 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-12 07:37 pm (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-12 11:12 pm (UTC) - Expand

(no subject)

From: [identity profile] pphantom.livejournal.com - Date: 2013-03-12 12:08 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-12 05:52 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-17 06:53 pm (UTC) - Expand

(no subject)

From: [identity profile] igoretz.livejournal.com - Date: 2013-03-18 05:40 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-18 06:22 pm (UTC) - Expand

Date: 2013-03-12 03:13 am (UTC)
From: [identity profile] egorfine.livejournal.com
"поддержка Юникода"

really? в нем нельзя распилить посередине UTF-8 строку? как же им пользоваться тогда?

Date: 2013-03-12 05:41 am (UTC)
From: [identity profile] igoretz.livejournal.com
А что значит "распилить посередине UTF-8 строку"?

Обработка Юникода в любой кодировке в Lua возможна, поскольку восьмибитовый символ строки может иметь любое значение (в том числе 0). Но вручную (или модуль подгрузить).

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

(no subject)

From: [identity profile] egorfine.livejournal.com - Date: 2013-03-12 02:10 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-17 06:45 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-17 10:53 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-17 11:27 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-18 11:32 am (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-18 12:14 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-18 02:54 pm (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-18 08:53 pm (UTC) - Expand

(no subject)

From: [identity profile] huzhepidarasa.livejournal.com - Date: 2013-03-19 08:12 am (UTC) - Expand

(no subject)

From: [identity profile] ltwood.livejournal.com - Date: 2013-03-19 01:32 pm (UTC) - Expand

UTF-8 in Lua 5.2

From: (Anonymous) - Date: 2014-10-09 09:29 am (UTC) - Expand

Date: 2013-03-12 10:09 am (UTC)
From: [identity profile] rudnev.livejournal.com
очень, конечно, жаль, что вы презрели майкрософт. обзор с-шарпа вашими глазами мог бы быть, наверное, и интересен и полезен.

Date: 2013-03-12 12:29 pm (UTC)
From: [identity profile] loyso-b.livejournal.com
В обзоре написано, а у вас нет: Главная фича - это встраиваемость языка в ваше хост-приложение. Отсюда становятся понятны многие дизайн решения авторов.

Это так, на всякий случай.

Date: 2013-03-12 05:56 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Да языки нынче каждый первый встраиваемые.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 11:38 am
Powered by Dreamwidth Studios