Как стать автором
Обновить

Комментарии 6

"Я не могу быть уверенным в том, в каких модулях какие находятся функции, какие у них сигнатуры, что они возвращают и как с ними работать. Зубрить документацию, конечно, не вариант, а переключаться каждую секунду на окно браузера чтобы найти нужную информацию - такое себе, если честно"

Вообще, подобные вещи можно решить несколько проще:
1. Второй монитор с документацией на удивление творит чудеса, очень советую : )
2. Динамические системы автодополнения. Надо, правда, постараться, но когда набираешь httpd. - оно сразу может выводить ряд подсказок включая описания, аргументы и даже примеры, правда, для ООП может потребоваться определенное соглашение для именования этих объектов, чтобы подсказки работали по самому тексту.

Второй монитор с документацией на удивление творит чудеса, очень советую : )

Подозреваю, что этот пункт просто ради рофла, иначе мне придётся выяснять, как монитор переносить в рюкзаке :)

Динамические системы автодополнения.

Да, VSCode умеет запоминать введённые слова и в дальнейшем предлагать их для автодополнения. Но всё же это не то же самое, что ввести имя переменной, точку и в выпавшем списке просматривать доступные методы и свойства. А хотелось именно этого.

В качестве альтернативы:

Вот так можно создать http сервер на Lua без тарантула:

local server = require 'http.server'
local headers = require 'http.headers'

local srv = server.listen {
  host = 'localhost',
  port = 82,
  onstream = function (sv, out)
    local hdrs = out:get_headers()
    local method = hdrs:get(':method')
    local path = hdrs:get(':path') or '/'

    local rh = headers.new()
    rh:append(':status','200')
    rh:append('content-type','text/plain')

    out:write_headers(rh, false)
    out:write_chunk(("Received '%s' request on '%s' at %s\n"):format(method, path, os.date()), true)
  end
}

srv:listen()
srv:loop()

https://onelinerhub.com/lua/how-to-create-http-server

--------------------------

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

Как и C/C++, язык Terra статически типизируемый, компилируемый язык с «ручным» управлением памятью. В отличие от C/C++, он изначально спроектирован для метапрограммирования с помощью Lua.

https://habr.com/ru/articles/336406/

Я бы не стал утверждать, что Lua изучается за один вечер. Да, основы какие то можно понять. Но что то посерьезнее, типа работы с Global и метаобъектов, это далеко не такие простые темы.

Спасибо за статью, очень интересно, надо попробовать.

Поделюсь также нашим опытом. Для типизации мы используем плагин EmmyLua(есть и для JetBrains и для VSCode) и его аннотации.
Чтобы подсветка синтаксиса для box и прочих тарантуловских объектов работала, мы делаем отдельный файлик с аннотациями. В нём описываем известные нам классы и методы работы с ними. Вот кусочек с примером:

--- @class box
--- @field once fun(key: string, func:fun(), ...):void Execute a function, provided it has not been executed before. A passed value is checked to see whether the function has already been executed. If it has been executed before, nothing happens. If it has not been executed before, the function is invoked.
--- @field error fun(code_or_obj: number|{code:number, reason:string}, errtext:string, ...):void
--- @field space space_object[]
--- @field schema schema
--- @field atomic fun(func: fun(), ...) Execute a function, acting as if the function starts with an implicit box.begin() and ends with an implicit box.commit() if successful, or ends with an implicit box.rollback() if there is an error.
--- @field index index_object[]
box = {}

--- @class schema
--- @field space space

--- @class space
--- @field create fun(name:string, options:{engine: string, field_count: number, format: table, id: number, if_not_exists:boolean, is_local:boolean, is_sync:boolean, temporary:boolean, user:string}):space_object

Да, знаю про такой, спасибо за дополнение. Именно реализация аннотаций от EmmyLua была взята за основу в языковом сервере для VSCode. Кстати, вы можете сделать доброе дело и поделиться вашими наработками, опубликовав плагин с типами Тарантула, подробности в этой доке ;)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории