Lua-среда
Lua-среда
Заголовок раздела «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.
Обработка нескольких источников событий:
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 и не требуют указания в modules::
process— создание процессов, отправка сообщений, мониторинг и связываниеchannel— каналы в стиле Gopayload— входной payload записиprint,subscribe,unsubscribe— логирование и pub/subos,table,math,string,coroutine,errors— стандартные библиотеки
Всё остальное загружается через require() и должно быть указано в allowlist modules: записи:
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См. Обработка ошибок для паттернов.
Что дальше
Заголовок раздела «Что дальше»- Определения записей — настройка точек входа
- Каналы — паттерны каналов
- Управление процессами — создание и супервизия
- Функции — межпроцессные вызовы