Sprachfunktionen
Alles, was Sie brauchen, um resiliente Hochleistungsdienste zu bauen.
Actor-Modell
Actors sind die grundlegende Berechnungseinheit in Hew. Jeder Actor besitzt seinen Zustand exklusiv, mit isolierten Heaps und typisiertem Nachrichtenversand. Der Compiler stellt sicher, dass alle Nachrichten zur Kompilierzeit Send-sicher sind.
- ▸ Isolation ohne Zusatzkosten
- ▸ Send-Prüfung zur Kompilierzeit
- ▸ Single-threaded Ausführung pro Actor
- ▸ Begrenzte Mailboxen mit Gegendruck
- ▸ Direkte Methodenaufrufe:
counter.increment(10) - ▸ Lambda-Actors mit
<--Sendeoperator:worker <- 42
Speichermodell
Hew verwendet RAII — Speicher wird deterministisch über den Drop-Trait am Scope-Ende freigegeben. Jeder Actor besitzt seinen eigenen Heap, und wenn ein Actor terminiert, wird sein gesamter Heap in einer Operation freigegeben. Actorübergreifende Nachrichten verwenden Copy-on-send-Semantik: Werte werden tief kopiert, sodass der Speicher jedes Actors vollständig isoliert bleibt.
- ▸ RAII-basiert mit deterministischer Freigabe
- ▸ Deterministische Zerstörung über den Drop-Trait
- ▸ Heap-Besitz pro Actor
- ▸ Copy-on-send für actorübergreifende Nachrichten
Supervision Trees
Inspiriert von Erlang/OTP macht Hew Fehlertoleranz zu einem Sprachfeature. Supervisors starten fehlgeschlagene Actors automatisch mit konfigurierbaren Strategien und Neustart-Budgets neu.
- ▸ Strategien: one_for_one, one_for_all, rest_for_one
- ▸ Neustart-Budgets begrenzen Fehler
- ▸ Supervision-Hierarchien sind komponierbar
- ▸ Eskalations-Semantik für nicht behebbare Fehler
Strukturierte Nebenläufigkeit
Tasks in Hew sind immer begrenzt. Ein Task<T> repräsentiert nebenläufige Arbeit innerhalb eines Actors. Starten Sie Tasks mit s.launch in einem scope |s| { ... }-Block — wenn ein übergeordneter Scope endet, wartet er auf den Abschluss aller Kind-Tasks. Jeder Task hat einen Besitzer, und jeder Besitzer räumt auf. Explizite Stornierung ist über s.cancel() verfügbar.
- ▸
Task<T>— typisierte nebenläufige Berechnung - ▸
s.launchinscope |s| { ... }für lebenszeitbegrenzte Tasks - ▸ M:N-Work-Stealing-Scheduler über CPU-Kerne
- ▸ Kooperative Stornierung über
s.cancel() - ▸ Automatischer Join — der Scope wartet auf alle Kinder
Nebenläufigkeitsmuster
Hew bietet erstklassige Sprachkonstrukte für gängige Nebenläufigkeitsmuster. select wartet auf die erste von mehreren Operationen und join führt Tasks parallel aus und sammelt alle Ergebnisse. select unterstützt after-Timeouts für fristbasierte Fallbacks.
- ▸
select {}— auf den ersten bereiten Zweig warten - ▸
join {}— alle ausführen, alle Ergebnisse sammeln - ▸
after-Timeout-Klauseln beiselect
Zustandsautomaten
Die meisten langlebigen Actors sind im Kern Zustandsautomaten. Hew macht das explizit mit machine, state, event und on als Sprachkonstrukte. Der Compiler validiert Übergänge, prüft Guard-Ausdrücke und verifiziert die Erreichbarkeit von Zuständen zur Kompilierzeit.
- ▸
machine-Deklarationen in Actors - ▸ Benannte Zustände mit typisierten Events
- ▸
when-Guards mit Verweis auf Actor-Felder - ▸ Vollständigkeitsprüfung zur Kompilierzeit
Verteilte Actors
Starten Sie Actors auf entfernten Knoten mit spawn ... on node. Der Compiler stellt sicher, dass alle Argumente und Nachrichten wire-sicher sind. Entfernte Actor-Handles sehen identisch zu lokalen aus — Nachrichtenversand wird serialisiert und transparent über TCP weitergeleitet.
- ▸
spawn Actor(args) on node - ▸ Transparente lokale/entfernte Handles
- ▸ Gossip-basierte Cluster-Mitgliedschaft
- ▸ Wire-Sicherheit zur Kompilierzeit für alle entfernten Nachrichten
Wire Contracts
Netzwerkprotokolle sind erstklassige Typen in Hew. Wire-Typen definieren Serialisierungsformat, Feldnummerierung und Schema-Evolutionsregeln. Der Compiler erzwingt vorwärtskompatible Evolution — neue Felder integrieren sich sicher in bestehende Deployments.
- ▸ Hew Binary Format (HBF) — kompakte binäre Kodierung
- ▸ JSON-Kodierung für externe Interoperabilität
- ▸ Schema-Evolution mit Feld-Tags
- ▸ Kompatibilitätsprüfungen zur Kompilierzeit
Typsystem
Das Typsystem von Hew garantiert Actor-Isolation zur Kompilierzeit. Typen tragen Send- und Frozen-Capability-Traits für actorübergreifende Sicherheit, während Sie innerhalb eines Actors volle Mutationsfreiheit haben. Bidirektionale Typinferenz minimiert Annotationen und Generics werden monomorphisiert für Abstraktion ohne Zusatzkosten.
Generics mit Monomorphisierung
Generische Typen und Funktionen ohne Zusatzkosten. Der Compiler erzeugt spezialisierten Code für jeden konkreten Typ — vollständig inlined, vollständig optimiert.
Send- und Frozen-Capability-Traits
Typen tragen Capabilities, die der Compiler durchsetzt. Send für actorübergreifenden Transfer, Frozen für gemeinsamen unveränderlichen Zugriff. Innerhalb eines Actors haben Sie volle Mutationsfreiheit — der Compiler prüft Grenzen, wo es darauf ankommt.
Bidirektionale Typinferenz
Typen fließen aus Aufrufkontexten in Lambdas und Generics. Der Compiler leitet Parametertypen aus Signaturen ab — minimale Annotationen, volle Kompilierzeitsicherheit.
Pattern Matching mit Vollständigkeit
Match-Ausdrücke werden zur Kompilierzeit auf Vollständigkeit geprüft. Der Compiler stellt sicher, dass jeder mögliche Fall behandelt wird.
C FFI mit extern-Blöcken
Rufen Sie C-Bibliotheken direkt auf. Extern-Blöcke deklarieren externe Funktionen mit voller Typsicherheit an der Grenze.
Option<T> und Result<T, E>
Optionale Werte und Fehlerbehandlung sind explizit im Typsystem. Jede Abwesenheit ist typisiert, jeder Fehler wird behandelt.
Iterator-Trait mit Adaptern
Komponieren Sie lazy Transformationen über Sequenzen. Map, filter, fold — vom Compiler zu effizienten Schleifen verschmolzen.
Kompilierung
Hew kompiliert zu nativem Maschinencode. Der Befehl hew build steuert ein Rust-Frontend und ein C++-MLIR-Backend mit progressiver Absenkung über LLVM.