Lua Runtime
Runtime de computação principal do Wippy otimizado para workloads I/O-bound e lógica de negócios. Código executa em processos isolados que comunicam através de passagem de mensagens - sem memória compartilhada, sem locks.
Wippy é projetado como um runtime poliglota. Enquanto Lua é a linguagem principal, versões futuras suportarão linguagens adicionais através de WebAssembly e integração Temporal para workloads intensivas em computação ou especializadas.
Processos
Seu código Lua executa dentro de processos - contextos de execução isolados gerenciados pelo scheduler. Cada processo:
- Tem seu próprio espaço de memória
- Cede em operações bloqueantes (I/O, channels)
- Pode ser monitorado e supervisionado
- Escala para milhares por máquina
local pid = process.spawn("app.workers:handler", "app:processes")
process.send(pid, "task", {data = "work"})
Veja Process Management para criação, vinculação e supervisão.
Channels
Channels estilo Go para comunicação:
local ch = channel.new() -- sem buffer
local buffered = channel.new(10)
ch:send(value) -- bloqueia até receber
local val, ok = ch:receive() -- bloqueia até pronto
Veja Channels para select e padrões.
Corrotinas
Dentro de um processo, crie corrotinas leves:
coroutine.spawn(function()
local data = fetch_data()
ch:send(data)
end)
do_other_work() -- continua imediatamente
Corrotinas criadas são gerenciadas pelo scheduler - sem yield/resume manual.
Select
Trate múltiplas fontes de eventos:
local r = channel.select {
inbox:case_receive(),
events:case_receive(),
timeout:case_receive()
}
if r.channel == timeout then
-- timeout
elseif r.channel == events then
handle_event(r.value)
else
handle_message(r.value)
end
Globais
Estes estão sempre disponíveis sem require:
process- gerenciamento de processos e mensagenschannel- channels estilo Goos- funções de tempo e sistemacoroutine- concorrência leve
Módulos
local json = require("json")
local sql = require("sql")
local http = require("http_client")
Módulos disponíveis dependem da configuração da entrada. Veja Entry Definitions.
Bibliotecas Externas
Wippy usa sintaxe Lua 5.3 com um sistema de tipos gradual inspirado por Luau. Tipos são valores de runtime de primeira classe - chamáveis para validação, passáveis como argumentos e inspecionáveis - substituindo a necessidade de bibliotecas de schema como Zod ou Pydantic.
Bibliotecas Lua externas (LuaRocks, etc.) não são suportadas. O runtime fornece seu próprio sistema de módulos com extensões integradas para I/O, rede e integração de sistema.
Para extensões customizadas, veja Modules na documentação de internals.
Tratamento de Erros
Funções retornam pares result, error:
local data, err = json.decode(input)
if err then
return nil, errors.wrap(err, "decode failed")
end
Veja Error Handling para padrões.
Próximos Passos
- Entry Definitions - Configurar pontos de entrada
- Channels - Padrões de channel
- Process Management - Criação e supervisão
- Functions - Chamadas entre processos