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
Speichermodell
RAII — deterministische Zerstörung über den Drop-Trait
Actor heap — jeder Actor besitzt seinen Speicher
Copy-on-send — Nachrichten werden tief kopiert
Predictable — konstante Latenz, deterministisches Aufräumen

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.launch in scope |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 bei select

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.

.hew Frontend Type Check MLIR LLVM IR Native Binary