Lua-Laufzeitumgebung
Die primäre Laufzeitumgebung von Wippy, optimiert für E/A-gebundene Workloads und Geschäftslogik. Code läuft in isolierten Prozessen, die über Nachrichtenübergabe kommunizieren - kein gemeinsamer Speicher, keine Sperren.
Wippy ist als polyglotte Laufzeitumgebung konzipiert. Während Lua die primäre Sprache ist, werden zukünftige Versionen zusätzliche Sprachen über WebAssembly und Temporal-Integration für rechenintensive oder spezialisierte Workloads unterstützen.
Prozesse
Ihr Lua-Code läuft innerhalb von Prozessen - isolierten Ausführungskontexten, die vom Scheduler verwaltet werden. Jeder Prozess:
- Hat seinen eigenen Speicherbereich
- Gibt bei blockierenden Operationen ab (E/A, Channels)
- Kann überwacht und beaufsichtigt werden
- Skaliert auf Tausende pro Maschine
local pid = process.spawn("app.workers:handler", "app:processes")
process.send(pid, "task", {data = "work"})
Siehe Prozessverwaltung für Spawning, Linking und Überwachung.
Channels
Go-ähnliche Channels für Kommunikation:
local ch = channel.new() -- ungepuffert
local buffered = channel.new(10)
ch:send(value) -- blockiert bis empfangen
local val, ok = ch:receive() -- blockiert bis bereit
Siehe Channels für Select und Muster.
Coroutinen
Innerhalb eines Prozesses können Sie leichtgewichtige Coroutinen starten:
coroutine.spawn(function()
local data = fetch_data()
ch:send(data)
end)
do_other_work() -- setzt sofort fort
Gespawnte Coroutinen werden vom Scheduler verwaltet - kein manuelles Yield/Resume.
Select
Behandeln Sie mehrere Ereignisquellen:
local r = channel.select {
inbox:case_receive(),
events:case_receive(),
timeout:case_receive()
}
if r.channel == timeout then
-- Timeout aufgetreten
elseif r.channel == events then
handle_event(r.value)
else
handle_message(r.value)
end
Globale Variablen
Diese sind immer ohne require verfügbar:
process- Prozessverwaltung und Nachrichtenaustauschchannel- Go-ähnliche Channelsos- Zeit- und Systemfunktionencoroutine- leichtgewichtige Nebenläufigkeit
Module
local json = require("json")
local sql = require("sql")
local http = require("http_client")
Verfügbare Module hängen von der Entry-Konfiguration ab. Siehe Entry-Definitionen.
Externe Bibliotheken
Wippy verwendet Lua 5.3-Syntax mit einem graduellen Typsystem, inspiriert von Luau. Typen sind erstklassige Laufzeitwerte - aufrufbar zur Validierung, als Argumente übergebbar und introspektierbar - was den Bedarf an Schema-Bibliotheken wie Zod oder Pydantic ersetzt.
Externe Lua-Bibliotheken (LuaRocks, etc.) werden nicht unterstützt. Die Laufzeitumgebung stellt ihr eigenes Modulsystem mit integrierten Erweiterungen für E/A, Netzwerk und Systemintegration bereit.
Für benutzerdefinierte Erweiterungen siehe Module in der Internals-Dokumentation.
Fehlerbehandlung
Funktionen geben result, error-Paare zurück:
local data, err = json.decode(input)
if err then
return nil, errors.wrap(err, "decode failed")
end
Siehe Fehlerbehandlung für Muster.
Nächste Schritte
- Entry-Definitionen - Einstiegspunkte konfigurieren
- Channels - Channel-Muster
- Prozessverwaltung - Spawning und Überwachung
- Funktionen - Prozessübergreifende Aufrufe