Runtime de Lua
Runtime de Lua
Sección titulada «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
Sección titulada «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
Sección titulada «Canales»Canales estilo Go para comunicación:
local ch = channel.new() -- sin bufferlocal buffered = channel.new(10)
ch:send(value) -- bloquea hasta que se recibalocal val, ok = ch:receive() -- bloquea hasta que esté listoConsulte Canales para select y patrones.
Corrutinas
Sección titulada «Corrutinas»Dentro de un proceso, cree corrutinas ligeras:
coroutine.spawn(function() local data = fetch_data() ch:send(data)end)
do_other_work() -- continúa inmediatamenteLas corrutinas creadas son gestionadas por el planificador, sin yield/resume manual.
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 agotadoelseif r.channel == events then handle_event(r.value)else handle_message(r.value)endGlobales
Sección titulada «Globales»Estos están siempre disponibles sin require y no necesitan aparecer en modules::
process- crear procesos, enviar mensajes, monitorear y enlazarchannel- canales estilo Gopayload- el payload de entrada del entryprint,subscribe,unsubscribe- logging y pub/subos,table,math,string,coroutine,errors- bibliotecas estándar
Módulos
Sección titulada «Módulos»Todo lo demás se carga con require() y debe aparecer en la lista de permitidos modules: del entry:
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
Sección titulada «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
Sección titulada «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")endConsulte Manejo de Errores para patrones.
Siguiente
Sección titulada «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