Перейти к основному содержимому

Lua

Реально простой и реально мощный язык программирования. luajit приближен по скорости к C++, с головой опережает python, node, ruby и многие другие языки, при этом имеет динамическую типизацию и не превращает все в ООП (но и не запрещает)

Мои применения​

  • Garry's Mod сервера - основной язык моддинга (отсюда мои ноги растут). Мой проект trigon.im в 2015 году был в топ-3 garrysmod по мониторингу GameTracker 😎
  • OpenResty - фильтрую запросы на уровне веб сервера. Рейт лимиты, алерты и тд. Так "дешевле", чем на уровне php. Еще слышал про Kong, но руки не дошли потрогать
  • ggram – Моя библиотека для написания телеграм ботов различной сложности. Почти все мои боты написаны на Lua
  • long polling server – OpenSource клиент и сервер, написанные на lua-express. Список применений написан в первой ссылке (по сути, единый вебхук для всего)
  • GMDonate API написан тоже на lua-express

Что мне не нравится в Lua​

Отсутствие continue по умолчанию​

continue это keyword, который позволяет пропустить итерацию цикла при каком-то условии. В минимальной демке, как снизу, проблема не кажется существенной, но когда функции побольше, то это ощутимое неудобство

local start_loop = function()
while something do
wait(1)

local search_ok, ctx = do_search(SEARCH_QUERY)
if search_ok then
local dat = ctx.json()
if dat and dat.success then
local step_ok, err = pcall(step_loop, dat)
if not step_ok then
print("step_loop error")
end
else
print("query error 2", ctx)
end
else
print("query error 1", ctx)
end
end
end

keyword local вместо global​

Почти никогда ничего не нужно делать глобальным, но почти всегда нужно делать что-то локальным. И keyword local становится чем-то, что уже пишется на автомате. Чем-то, что вообще не должно попадать в поле зрения

Функции определяются громадно​

local function something(arg1, arg2)
print(arg1 + arg2)
end

do_something(function(a, b)
return a + b
end)

Все остальное​

  • Можно найти по тегу lua в блоге
  • А также в сайдбаре на странице, где вы сейчас