Clause

Erlang/OTP 29, kompilerat till maskinkod

Clause är en AOT-kompilator för Erlang. Den förbehandlar, parsar och analyserar Erlang-källkod, kompilerar den via LLVM och länkar körbara program med en egen runtime: lättviktsprocesser, meddelandeöverföring och skräpsamling per process.

Under utveckling: en växande delmängd av Erlang kompileras och körs redan idag. Dokumentationen beskriver vad som fungerar och var Clause skiljer sig från Erlang/OTP.

Funktioner

Funktioner i detalj

Frontend

  • Förbehandling: makron, include, include_lib, villkorlig kompilering och språkfunktioner
  • Erlang/OTP 29-syntax: uttryck, mönster, records, bitsträngar, typer och specifikationer, kontrollflöde och comprehensions
  • Syntaxkontroll, utskrift av expanderad källkod och ett indenterat syntaxträd
  • Diagnostik i källkoden över flera indatafiler

Kompilator

  • Semantisk analys: kontroll av delmängden, variabelbindningar, anropsupplösning, deklarerade och härledda typer
  • LLVM O0, O2 och Os; objektfiler, IR och bitkod per modul; IR-ögonblicksbilder med Erlang-källkod
  • Typrapporter: källkod med härledda funktionssignaturer
  • Riktiga svansanrop för lokala, fjärr- och ömsesidigt rekursiva anrop
  • Ett tydligt notimpl-meddelande för giltig Erlang som kräver en funktion som ännu inte finns

Runtime

  • Runtime-bibliotek i C++23 utan LLVM, länkat i varje program
  • Heltal med godtycklig precision, flyttal, atomer, tupler, listor, maps, bitsträngar, records, funs, pids, portar och referenser
  • Processer, meddelanden, selektiv receive, länkar, monitorer och registrerade namn på schemaläggartrådar
  • Heap per process med kopierande skräpsamlare och binärer utanför heapen
  • Portar för standard-I/O, filer, underprocesser och sockets
  • Undantag med try, catch och after, samt stackspår
  • io:format med OTP:s ~p-formatering; delmängder av lists, maps, file och io

Projekt och verktyg

  • TOML-projekt med namngivna mål, hittande av källfiler och inställningar per mål
  • Kommenterade startprojekt med clau --new-project
  • Ett clau-kommando från Erlang-källkod till körbart program
  • Beteendet kontrolleras mot utdata från referensversionen av Erlang/OTP