
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 på flera schemaläggartrådar, meddelandeöverföring, portar och skräpsamling per process.
Under utveckling: Erlang/OTP 29-program kompileras till körbara program som redan idag körs på Windows och Linux, med Clauses egna stdlib, kernel, crypto och ssl. Återstår: macOS med Apple Silicon och riktig ARM-hårdvara, OTP:s egna testsviter, käll- och radpositioner i stackspår och mer optimering; distribution och kodladdning under körning stöds inte. Sidan med prestandatester visar var Clause står jämfört med OTP; dokumentationen beskriver vad som fungerar och var Clause skiljer sig.
Funktioner
OTP 29
Modern Erlang-syntax
Förbehandlar och parsar Erlang/OTP 29-källkod, inklusive native records.
1,49× snabbare
Hastighet mot OTP
Geometriskt medelvärde av 31 testkärnor, Clause -O2 mot BEAM JIT.
clau -o app
Körbara program
Ett kommando från Erlang-källkod till ett fristående program, kompilerat via LLVM med länktidsoptimering. Även escripts.
spawn · send · receive
Erlang-processer
Lättviktsprocesser med skräpsamling per process på flera schemaläggartrådar.
gen_server · ssl
OTP-bibliotek
Clauses egna stdlib, kernel, crypto och ssl med samma exporter, resultat och fel som OTP 29.
gen_tcp · file · os
Portar och I/O
Filer, underprocesser och TCP/UDP-sockets på en händelsestyrd I/O-tråd.
--print-types
Typhärledning
Med O2 tar härledda typer bort kontroller vid körning och väljer specialiserad kod.
clau --shell
Interaktivt skal
Länkar Erlang-skalet till ett körbart program: erl_eval, historik och records, utan BEAM.
7 plattformar
Plattformsoberoende
Körs på Windows x64 och Linux x86-64; objektfiler för sju plattformar.
Funktioner i detalj
Frontend
- Erlang/OTP 29-syntax: records, maps, bitsträngar, comprehensions, typer och specifikationer
- Makron, includes och villkorlig kompilering
- Parse transforms utan installerad Erlang/OTP: ms_transform, qlc, merl och egna
- ASN.1-specifikationer kompilerade till moduler som asn1ct gör: BER, DER, PER och UPER
Erlang-semantik
- Mönstermatchning och guards i klausuler, case, if och receive
- Records, funs, maybe och list-, binär- och map-comprehensions
- Undantag med try, catch och stackspår
Kompilator
- Typhärledning med funktionstyper per klausul
- LLVM O0, O2 och Os, med länktidsoptimering över moduler
- O2 tar bort typkontroller som härledningen bevisar
- O2 infogar små lokala funktioner, kända funs och lists-loopar
- Riktiga svansanrop och djup rekursion
- Parallell kodgenerering på varje hårdvarutråd
Runtime
- C++23-runtime med alla Erlang-termtyper, inklusive heltal med godtycklig precision
- Processer, selektiv receive, länkar, monitorer och timers på flera schemaläggare
- Heapar per process med kopierande skräpsamlare
- Samtidiga ETS-tabeller i C++
OTP-bibliotek
- Clauses egna OTP 29-moduler med OTP:s exporter, resultat och felorsaker
- gen_server, gen_statem, gen_event, supervisor, application och logger
- stdlib: lists, maps, string, binary, json, re, rand och samlingsmodulerna
- ets, dets, disk_log, zip och erl_tar med filer som OTP skriver dem
- erl_scan, erl_parse, erl_lint, erl_eval, qlc och compile vid körning, där kompilerade moduler tolkas
- syntax_tools: erl_syntax, erl_prettypr, epp_dodger och merl
- kernel: file, gen_tcp, gen_udp, inet, inet_res och os
- crypto via OpenSSL med FIPS-läge; public_key med validering av certifikatkedjor, CRL och OCSP
- ssl: TLS 1.2- och 1.3-anslutningar via OpenSSL:s libssl
Projekt och verktyg
- Ett clau-kommando från Erlang-källkod till ett körbart program
- TOML-projekt med SQLite-byggcache
- Interaktivt Erlang-skal med clau --shell
- Felsökningsinformation med -g (CodeView eller DWARF 5) och profilering med --profile
- Testad mot referensimplementationen Erlang/OTP och jämförd med OTP i benchmarks
Clause