Lua-среда

Основная среда вычислений Wippy, оптимизированная для I/O-нагруженных задач и бизнес-логики. Код работает в изолированных процессах, общающихся через передачу сообщений — без разделяемой памяти и блокировок.

Wippy спроектирован как полиглотная среда исполнения. Lua — основной язык, но в будущем будет поддержка других языков через WebAssembly и интеграцию с Temporal для вычислительно-интенсивных или специализированных задач.

Процессы

Lua-код выполняется внутри процессов — изолированных контекстов выполнения под управлением планировщика. Каждый процесс:

  • Имеет собственное пространство памяти
  • Делает yield на блокирующих операциях (I/O, каналы)
  • Может быть под мониторингом и супервизией
  • Масштабируется до тысяч на машину
Типичный Lua-процесс имеет базовый оверхед памяти ~13 KB.
local pid = process.spawn("app.workers:handler", "app:processes")
process.send(pid, "task", {data = "work"})

См. Управление процессами для создания, связывания и супервизии.

Каналы

Каналы в стиле Go для коммуникации:

local ch = channel.new()        -- без буфера
local buffered = channel.new(10)

ch:send(value)                  -- блокируется до получения
local val, ok = ch:receive()    -- блокируется до готовности

См. Каналы для select и паттернов.

Корутины

Внутри процесса — легковесные корутины:

coroutine.spawn(function()
    local data = fetch_data()
    ch:send(data)
end)

do_other_work()  -- продолжается немедленно

Spawned-корутины управляются планировщиком — без ручного yield/resume.

Select

Обработка нескольких источников событий:

local r = channel.select {
    inbox:case_receive(),
    events:case_receive(),
    timeout:case_receive()
}

if r.channel == timeout then
    -- таймаут
elseif r.channel == events then
    handle_event(r.value)
else
    handle_message(r.value)
end

Глобальные переменные

Всегда доступны без require:

  • process — управление процессами и сообщениями
  • channel — каналы в стиле Go
  • os — функции времени и системы
  • coroutine — легковесная конкурентность

Модули

local json = require("json")
local sql = require("sql")
local http = require("http_client")

Доступные модули зависят от конфигурации записи. См. Определения записей.

Внешние библиотеки

Wippy использует синтаксис Lua 5.3 с постепенной системой типов, вдохновлённой Luau. Типы — полноценные значения времени выполнения: их можно вызывать для валидации, передавать как аргументы и интроспектировать. Это заменяет библиотеки схем вроде Zod или Pydantic.

Внешние Lua-библиотеки (LuaRocks и др.) не поддерживаются. Среда исполнения предоставляет собственную систему модулей со встроенными расширениями для I/O, сети и системной интеграции.

Для собственных расширений см. Модули в документации внутреннего устройства.

Обработка ошибок

Функции возвращают пары result, error:

local data, err = json.decode(input)
if err then
    return nil, errors.wrap(err, "decode failed")
end

См. Обработка ошибок для паттернов.

Что дальше