Lua Runtime
Lua Runtime
Seção intitulada “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
Seção intitulada “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
Seção intitulada “Channels”Channels estilo Go para comunicação:
local ch = channel.new() -- sem bufferlocal buffered = channel.new(10)
ch:send(value) -- bloqueia até receberlocal val, ok = ch:receive() -- bloqueia até prontoVeja Channels para select e padrões.
Corrotinas
Seção intitulada “Corrotinas”Dentro de um processo, crie corrotinas leves:
coroutine.spawn(function() local data = fetch_data() ch:send(data)end)
do_other_work() -- continua imediatamenteCorrotinas criadas são gerenciadas pelo scheduler - sem yield/resume manual.
Trate múltiplas fontes de eventos:
local r = channel.select { inbox:case_receive(), events:case_receive(), timeout:case_receive()}
if r.channel == timeout then -- timeoutelseif r.channel == events then handle_event(r.value)else handle_message(r.value)endGlobais
Seção intitulada “Globais”Estes estão sempre disponíveis sem require e não precisam aparecer em modules::
process- spawnar processos, enviar mensagens, monitorar e vincularchannel- channels estilo Gopayload- o payload de entrada da entradaprint,subscribe,unsubscribe- logging e pub/subos,table,math,string,coroutine,errors- bibliotecas padrão
Módulos
Seção intitulada “Módulos”Todo o resto é carregado com require() e deve aparecer na lista de permissões modules: da entrada:
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
Seção intitulada “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
Seção intitulada “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")endVeja Error Handling para padrões.
Próximos Passos
Seção intitulada “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