Lua-Laufzeitumgebung
Lua-Laufzeitumgebung
Abschnitt betitelt „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
Abschnitt betitelt „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
Abschnitt betitelt „Channels“Go-ähnliche Channels für Kommunikation:
local ch = channel.new() -- ungepuffertlocal buffered = channel.new(10)
ch:send(value) -- blockiert bis empfangenlocal val, ok = ch:receive() -- blockiert bis bereitSiehe Channels für Select und Muster.
Coroutinen
Abschnitt betitelt „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 fortGespawnte Coroutinen werden vom Scheduler verwaltet - kein manuelles Yield/Resume.
Behandeln Sie mehrere Ereignisquellen:
local r = channel.select { inbox:case_receive(), events:case_receive(), timeout:case_receive()}
if r.channel == timeout then -- Timeout aufgetretenelseif r.channel == events then handle_event(r.value)else handle_message(r.value)endGlobale Variablen
Abschnitt betitelt „Globale Variablen“Diese sind immer ohne require verfügbar und müssen nicht in modules: aufgeführt werden:
process- Prozesse spawnen, Nachrichten senden, überwachen und verknüpfenchannel- Go-ähnliche Channelspayload- das Eingabe-Payload des Entrysprint,subscribe,unsubscribe- Logging und Pub/Subos,table,math,string,coroutine,errors- Standardbibliotheken
Alles andere wird mit require() geladen und muss in der modules:-Allowlist des Entrys erscheinen:
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
Abschnitt betitelt „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
Abschnitt betitelt „Fehlerbehandlung“Funktionen geben result, error-Paare zurück:
local data, err = json.decode(input)if err then return nil, errors.wrap(err, "decode failed")endSiehe Fehlerbehandlung für Muster.
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Entry-Definitionen - Einstiegspunkte konfigurieren
- Channels - Channel-Muster
- Prozessverwaltung - Spawning und Überwachung
- Funktionen - Prozessübergreifende Aufrufe