Семинар: интересные библиотеки, подходы, решения, связанные с языком Lua.

Предисловіе: давеча вашъ покорный слуга оказался свидѣтелемъ наинтереснѣйшей бесѣды въ салонѣ instead@conference.jabber.ru и съ позволенія участниковъ импровизированнаго семинара я публикую свои конспекты здѣсь для просвѣщенія любознательныхъ господъ.


Петр Косых: есть что рассказать? давай!

true-grue: Да, я, пожалуй, начну. Сегодня я хочу рассказать о 3 интересных вещах, связанных с Lua. Эти вещи заставили меня иначе взглянуть на язык, отнестись к нему более серьезно.

Наверное, начну с библиотеки PEG. PEG очень популярный сейчас подход к синтаксическому разбору. Можно посмотреть определение в википедии. Языковыми средствами для Lua занимается Роберто Иерусалимский. Причем, его имя и научные статьи известны за пределами Lua-сообщества. Как ни странно, о нем тоже есть страничка на русской википедии.
А вот, собственно, его библиотека: http://www.inf.puc-rio.br/~roberto/lpeg/.
А интересные статьи можно почитать на его сайте http://www.inf.puc-rio.br/~roberto/

Итак, перехожу ко 2 «интересной вещи». Это Terralanghttp://terralang.org/ Помните шаблоны, макросы и прочее метапрограммирование? Terra позволяет реализовывать подобные вещи в синтаксисе Lua.

И очень кратко скажу о вещи номер 3. Это маленький, изящно реализованный препроцессор на Lua — http://lua-users.org/wiki/SimpleLuaPreprocessor.
Всем спасибо за внимание.

***true-grue ушел в глубину зрительного зала
***Петр Косых вылез на трибуну

Петр Косых: ну я не готовился… Так что могу пару слов только сказать. Сугубо инженерных.

Первая, есть такая замечательная библиотека — luaposix, которая дает возможность использовать posix вызовы из lua. Все эти сокеты опены форки и так далее. Это невероятно, насколько проще и быстрее пишутся всякие аналоги C утилит и демонов, без особенного ущерба в производительности. На самом деле, по работе, мы используем эту и несколько других библиотек для выполнения рутинного системного программирования.

Вторая вещь, я не найду сейчас конкретную ссылку, но на самом же lua есть прием, который заставляет декларировать глобальные переменные перед их использованием, если в lua ты обращаешься к переменной и, допустим, ты описался, написал if varable вместо if variable, то ошибку мы не получаем, получаем nil. в данном случае условие будет ложным. Такое поведение Lua может раздражать, особенно начинающих. Так вот, с помощью метатаблиц можно сделать так, что любая глобальная переменная должна быть определена ранее, чтобы быть используемой и в случае описки — мы получим диагностическую ошибку.

Вот пожалуй и все, что я готов сказать. Кроме того, что в lua отношение эффективность/размер стремится к бесконечности.

***Петр Косых слез под недовольный шум зала и затерялся в толпе.

true-grue: Спасибо!

***Дружные аплодисменты.

true-grue: В плане работы с мета-вещами Lua немножко напоминает Smalltalk. Где за поведение обычных вещи отвечают метавещи и у последних можно какие-то нюансы переопределить.
Петр Косых: Про глобальные переменные я все думаю не ввести ли это в INSTEAD, хотя бы опционально, но надо будет движок проверить — там скорее всего есть заточки на стандартное поведение.
true-grue: Но вот мне не очень понятен ход мыслей авторов языка в «if varable». Внутри это обращение к таблице по несуществующему ключу, правильно?
Петр Косых: По идее да, но отсутствие переменной это nil, nil в условиях это false.
true-grue: Но чему бы помешала выдача сообщения, если переменной не нашлось?
Петр Косых: Кстати — в 5.0 lua было несколько по другому.
oreolek: http://lua-users.org/wiki/DetectingUndefinedVariables
Петр Косых: Я думаю это фича, тем более раз на самой lua можно это сделать. И сообщение и error.

На семъ бесѣда ушла въ техническія тонкости, недоступныя моему пониманію. Да и рука ужѣ устала конспектировать.

true-grue: Первый Lua-семинар в России объявляется закрытым! :)

Похожие публикации

Нет комментариев