Lua-среда
Основная среда вычислений Wippy, оптимизированная для I/O-нагруженных задач и бизнес-логики. Код работает в изолированных процессах, общающихся через передачу сообщений — без разделяемой памяти и блокировок.
Wippy спроектирован как полиглотная среда исполнения. Lua — основной язык, но в будущем будет поддержка других языков через WebAssembly и интеграцию с Temporal для вычислительно-интенсивных или специализированных задач.
Процессы
Lua-код выполняется внутри процессов — изолированных контекстов выполнения под управлением планировщика. Каждый процесс:
- Имеет собственное пространство памяти
- Делает yield на блокирующих операциях (I/O, каналы)
- Может быть под мониторингом и супервизией
- Масштабируется до тысяч на машину
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— каналы в стиле Goos— функции времени и системы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
См. Обработка ошибок для паттернов.
Что дальше
- Определения записей — настройка точек входа
- Каналы — паттерны каналов
- Управление процессами — создание и супервизия
- Функции — межпроцессные вызовы