Clause

Erlang/OTP 29, kompiliert zu nativem Code

Clause ist ein AOT-Compiler für Erlang. Er verarbeitet, parst und analysiert Erlang-Quellcode, kompiliert ihn über LLVM und linkt native Programme mit einer eigenen Laufzeitumgebung: leichtgewichtige Prozesse, Nachrichtenaustausch und Garbage Collection pro Prozess.

In Entwicklung: Eine wachsende Teilmenge von Erlang lässt sich bereits kompilieren und ausführen. Die Dokumentation beschreibt, was funktioniert und wo Clause von Erlang/OTP abweicht.

Funktionen

Funktionen im Detail

Frontend

  • Präprozessor: Makros, include, include_lib, bedingte Kompilierung und Sprachfeatures
  • Erlang/OTP 29-Syntax: Ausdrücke, Muster, Records, Bitstrings, Typen und Spezifikationen, Kontrollfluss und Comprehensions
  • Syntaxprüfung, Ausgabe des expandierten Quellcodes und eingerückte Syntaxbaum-Ansicht
  • Diagnosen im Quellcode über mehrere Eingabedateien

Compiler

  • Semantische Analyse: Prüfung der Teilmenge, Variablenbindungen, Aufrufauflösung, deklarierte und inferierte Typen
  • LLVM O0, O2 und Os; Objektdateien, IR und Bitcode pro Modul; IR-Snapshots mit Erlang-Quellcode als Kommentar
  • Typberichte: Quellcode mit inferierten Funktionssignaturen
  • Echte Endrekursion für lokale, entfernte und wechselseitig rekursive Aufrufe
  • Eine eindeutige notimpl-Meldung für gültiges Erlang, das ein noch nicht implementiertes Feature braucht

Laufzeitumgebung

  • LLVM-freie C++23-Laufzeitbibliothek, in jedes Programm gelinkt
  • Ganzzahlen beliebiger Genauigkeit, Gleitkommazahlen, Atome, Tupel, Listen, Maps, Bitstrings, Records, Funs, Pids, Ports und Referenzen
  • Prozesse, Nachrichten, selektives receive, Links, Monitore und registrierte Namen auf Scheduler-Threads
  • Heap pro Prozess mit kopierendem Garbage Collector und Binärdaten außerhalb des Heaps
  • Ports für Standard-I/O, Dateien, Unterprozesse und Sockets
  • Ausnahmen mit try, catch und after sowie Stacktraces
  • io:format mit der ~p-Formatierung von OTP; Teilmengen von lists, maps, file und io

Projekte und Werkzeuge

  • TOML-Projekte mit benannten Zielen, Quellsuche und Optionen pro Ziel
  • Kommentierte Startprojekte mit clau --new-project
  • Ein clau-Befehl vom Erlang-Quellcode zum nativen Programm
  • Verhalten geprüft gegen die Ausgaben des Referenz-Erlang/OTP