Runtime de Lua
El runtime de computación principal de Wippy optimizado para cargas de trabajo de I/O y lógica de negocio. El código se ejecuta en procesos aislados que se comunican mediante paso de mensajes, sin memoria compartida ni bloqueos.
Wippy está diseñado como un runtime políglota. Aunque Lua es el lenguaje principal, versiones futuras soportarán lenguajes adicionales a través de WebAssembly e integración con Temporal para cargas de trabajo intensivas en cómputo o especializadas.
Procesos
Su código Lua se ejecuta dentro de procesos, contextos de ejecución aislados gestionados por el planificador. Cada proceso:
- Tiene su propio espacio de memoria
- Cede el control en operaciones bloqueantes (I/O, canales)
- Puede ser monitoreado y supervisado
- Escala a miles por máquina
local pid = process.spawn("app.workers:handler", "app:processes")
process.send(pid, "task", {data = "work"})
Consulte Gestión de Procesos para creación, enlace y supervisión.
Canales
Canales estilo Go para comunicación:
local ch = channel.new() -- sin buffer
local buffered = channel.new(10)
ch:send(value) -- bloquea hasta que se reciba
local val, ok = ch:receive() -- bloquea hasta que esté listo
Consulte Canales para select y patrones.
Corrutinas
Dentro de un proceso, cree corrutinas ligeras:
coroutine.spawn(function()
local data = fetch_data()
ch:send(data)
end)
do_other_work() -- continúa inmediatamente
Las corrutinas creadas son gestionadas por el planificador, sin yield/resume manual.
Select
Maneje múltiples fuentes de eventos:
local r = channel.select {
inbox:case_receive(),
events:case_receive(),
timeout:case_receive()
}
if r.channel == timeout then
-- tiempo agotado
elseif r.channel == events then
handle_event(r.value)
else
handle_message(r.value)
end
Globales
Estos están siempre disponibles sin require:
process- gestión de procesos y mensajeríachannel- canales estilo Goos- funciones de tiempo y sistemacoroutine- concurrencia ligera
Módulos
local json = require("json")
local sql = require("sql")
local http = require("http_client")
Los módulos disponibles dependen de la configuración de entrada. Consulte Definiciones de Entrada.
Bibliotecas Externas
Wippy usa sintaxis Lua 5.3 con un sistema de tipos gradual inspirado en Luau. Los tipos son valores de primera clase en tiempo de ejecución, invocables para validación, pasables como argumentos e introspectables, reemplazando la necesidad de bibliotecas de esquemas como Zod o Pydantic.
Las bibliotecas Lua externas (LuaRocks, etc.) no están soportadas. El runtime proporciona su propio sistema de módulos con extensiones incorporadas para I/O, redes e integración de sistema.
Para extensiones personalizadas, consulte Módulos en la documentación de internos.
Manejo de Errores
Las funciones devuelven pares resultado, error:
local data, err = json.decode(input)
if err then
return nil, errors.wrap(err, "decode failed")
end
Consulte Manejo de Errores para patrones.
Siguiente
- Definiciones de Entrada - Configurar puntos de entrada
- Canales - Patrones de canales
- Gestión de Procesos - Creación y supervisión
- Funciones - Llamadas entre procesos