
Erlang/OTP 29, compilé en code natif
Clause est un compilateur AOT pour Erlang. Il prétraite, analyse et vérifie le code Erlang, le compile via LLVM et produit des exécutables natifs liés à son propre runtime : processus légers sur plusieurs threads ordonnanceurs, passage de messages, ports et ramasse-miettes par processus.
En cours de développement : les programmes Erlang/OTP 29 se compilent déjà en exécutables natifs qui s'exécutent sous Windows et Linux, avec les propres stdlib, kernel, crypto et ssl de Clause. Reste à venir : macOS Apple Silicon et le matériel ARM natif, les suites de tests d'OTP, les fichiers source et numéros de ligne dans les traces de pile et davantage d'optimisation ; la distribution et le chargement de code à chaud ne sont pas pris en charge. La page des benchmarks montre où se situe Clause par rapport à OTP ; la documentation indique ce qui fonctionne et en quoi Clause diffère.
Fonctionnalités
OTP 29
Syntaxe Erlang moderne
Prétraite et analyse le source Erlang/OTP 29, records natifs compris.
1,49× plus rapide
Vitesse face à OTP
Moyenne géométrique de 31 noyaux de test, Clause -O2 face au JIT de BEAM.
clau -o app
Exécutables natifs
Une commande du source Erlang à un programme autonome, compilé via LLVM avec optimisation à l'édition de liens. Les escripts aussi.
spawn · send · receive
Processus Erlang
Processus légers avec ramasse-miettes par processus sur plusieurs threads ordonnanceurs.
gen_server · ssl
Bibliothèque OTP
Les propres stdlib, kernel, crypto et ssl de Clause, avec les exports, résultats et erreurs d'OTP 29.
gen_tcp · file · os
Ports et E/S
Fichiers, sous-processus et sockets TCP/UDP sur un unique thread d'E/S événementiel.
--print-types
Inférence de types
En O2, les types inférés suppriment des vérifications à l'exécution et sélectionnent du code spécialisé.
clau --shell
Shell interactif
Lie le shell Erlang à un exécutable : erl_eval, historique et records, sans BEAM.
7 cibles
Multiplateforme
Fonctionne sous Windows x64 et Linux x86-64 ; objets pour sept cibles.
Fonctionnalités en détail
Frontend
- Syntaxe Erlang/OTP 29 : records, maps, bitstrings, comprehensions, types et spécifications
- Macros, inclusions et compilation conditionnelle
- Parse transforms sans installation d'Erlang/OTP : ms_transform, qlc, merl et les vôtres
- Spécifications ASN.1 compilées en modules comme le fait asn1ct : BER, DER, PER et UPER
Sémantique Erlang
- Filtrage par motif et gardes dans les clauses, case, if et receive
- Records, funs, maybe et comprehensions de listes, binaires et maps
- Exceptions avec try, catch et traces de pile
Compilateur
- Inférence de types avec des types de fonctions par clause
- LLVM O0, O2 et Os, avec optimisation à l'édition de liens entre modules
- O2 supprime les vérifications de types prouvées par l'inférence
- O2 intègre en ligne les petites fonctions locales, les funs connues et les boucles de lists
- Vrais appels terminaux et récursion profonde
- Génération de code en parallèle sur chaque thread matériel
Runtime
- Runtime C++23 avec tous les types de termes Erlang, entiers en précision arbitraire compris
- Processus, receive sélectif, liens, moniteurs et timers sur plusieurs ordonnanceurs
- Tas par processus avec un ramasse-miettes par copie
- Tables ETS concurrentes en C++
Bibliothèque OTP
- Les propres modules OTP 29 de Clause, avec les exports, résultats et raisons d'erreur d'OTP
- gen_server, gen_statem, gen_event, supervisor, application et logger
- stdlib : lists, maps, string, binary, json, re, rand et les modules de collections
- ets, dets, disk_log, zip et erl_tar avec des fichiers tels qu'OTP les écrit
- erl_scan, erl_parse, erl_lint, erl_eval, qlc et compile à l'exécution, les modules compilés étant interprétés
- syntax_tools : erl_syntax, erl_prettypr, epp_dodger et merl
- kernel : file, gen_tcp, gen_udp, inet, inet_res et os
- crypto avec OpenSSL et mode FIPS ; public_key avec validation des chemins de certificats, CRL et OCSP
- ssl : connexions TLS 1.2 et 1.3 via la libssl d'OpenSSL
Projets et outils
- Une seule commande clau du source Erlang à un exécutable natif
- Projets TOML avec caches de compilation SQLite
- Shell Erlang interactif avec clau --shell
- Informations de débogage avec -g (CodeView ou DWARF 5) et profilage avec --profile
- Testé face à l'Erlang/OTP de référence et comparé à OTP par des benchmarks
Clause