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

Мой вклад в Lua

Список составлен от самых новых публичных работ до самых старых (старые в конце). Совсем незначительные работы в список не включены.

🚀 Портирование express.js на Lua

к сведению

Мой новый крупный проект, до которого в мире не существовало (или я не нашел) минималистичных non-blocking веб фреймворков, написанных на Lua. Несмотря на то, что это всего лишь порт чужого проекта с NodeJS, он потрепал мне вдоволь нервов. Хотя бы потому что у express.js был свой NodeJS, а у Lua – нет

💠 lua-express 💠 – портирование популярного express.js в чистый Lua. Старательный пост в блоге: тут

  • Проверен в бою на production сервере GMDonate API
  • Легко установить в отличии от Turbo, Luvit, Lapis
  • Все еще минимальное количество зависимостей

Готовые Middlewares

Портированы body-parser, cookie-parser, написаны несколько своих middlewares, таких как rate-limiter и validator.

Посмотреть можно: тут

Готовый long-polling сервер

Он написан как раз на lua-express и о нем лучше почитать в блоге: тут


Асинхронный MySQL клиент на голых сокетах

💠 luasocket-mysql 💠 – форк драйвера от OpenResty, переделанный таким образом, чтобы выполнять MySQL non-blocking запросы. Для Redis я тоже почти написал аналогичное решение, но еще не опубликовал. Если нужно – дайте знать.

  • Реализован MySQL Connection Pool. Создается несколько соединений с MySQL и если одно соединение занято тяжелым запросом, то новый запрос будет сделан параллельно
  • Никаких бинарных модулей, кроме luasocket, никаких ffi. Чистый Lua
  • Проверен в бою на Production API GMDonate

✈️ Библиотека для создания Telegram ботов

💠 ggram 💠 - моя библиотека для создания Telegram ботов на Lua с асинхронностью.

  • Может работать как внутри Garry's Mod, так и в чистом Lua без пачки зависимостей.
  • На ней написаны почти все мои боты
  • Асинхронная обработка команд и реализация подобия middlewares (изменения контекста запроса в процессе)
  • Возможность отправки файлов в формате multipart/form-data

Портирование Garry's Mod функций в чистый Lua

💠 lua-gmod-lib 💠 – портирование специальных функций из Garry's Mod в чистый Lua.

  • Реализация http.*, timer.*, PrintTable(), MsgC() и других функций.
  • Полезно для написания "кроссплатформенных" приложений, которые смогут работать и в гмоде и в чистом луа.
  • Сложность заключалась в основном как раз в таймерах и http функциях, потому что я до сих пор не нашел никого, кто сделал бы нормальные асинхронные http обертки в Lua

Асинхронные (non-blocking) HTTP запросы

к сведению

Это то, что мне больше всего мешало заняться чистым Lua. Мне хотелось писать на нем все те прикольные штуки, которые люди делают на NodeJS и Python, но в Lua не было даже асинхронных HTTP клиентов, не говоря уже о фреймворках для телеграм ботов. Об "non-blocking" вещах в Lua словно никто и не думал, кроме copas (который даже сейчас не очень популярен (200 звездочек. Когда я начинал, было 150)).

💠 lua-requests-async 💠 – библиотека, позволяющая выполнять асинхронные HTTP запросы в чистом Lua.

  • Один из моих телеграм ботов 24/7 выполняет через либу десятки запросов в секунду (@vk_reposter_bot) уже больше 2 лет
  • Нет никаких тяжелых зависимостей. Чисто copas и luasocket
  • Поддержка HTTPS запросов. Для NodeJS и Python это само собой разумеющееся, а для Lua – хрен нагуглишь
  • Пришлось пройти очень большой путь с десятками бессонных ночей, чтобы асинхронные запросы работали корректно продолжительное время

примечание

Возможно, я уже создал и другие штуковины на чистом Lua, но забыл их вписать здесь. Я думаю, что если ничего не изменится и я не смогу выхватить крутой юзернейм для организации в GitHub, то все новые разработки будут публиковаться в организации моего первого Lua детища вот здесь.

🙏 Если вы заметили, что я что-то забыл тут добавить – напишите в ЛС или создайте Pull Request или Issue, пожалуйста