Clause

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, passage de messages et ramasse-miettes par processus.

En cours de développement : un sous-ensemble croissant d'Erlang se compile et s'exécute déjà. La documentation indique ce qui fonctionne et en quoi Clause diffère d'Erlang/OTP.

Fonctionnalités

Fonctionnalités en détail

Frontend

  • Prétraitement : macros, include, include_lib, compilation conditionnelle et fonctionnalités du langage
  • Syntaxe Erlang/OTP 29 : expressions, motifs, records, bitstrings, types et spécifications, structures de contrôle et compréhensions
  • Vérification de la syntaxe, affichage du code expansé et arbre syntaxique indenté
  • Diagnostics sur le code source de plusieurs fichiers d'entrée

Compilateur

  • Analyse sémantique : vérification du sous-ensemble, liaison des variables, résolution des appels, types déclarés et inférés
  • LLVM O0, O2 et Os ; objets, IR et bitcode par module ; instantanés d'IR annotés avec le code Erlang
  • Rapports de types : code source annoté avec les signatures de fonctions inférées
  • Vrais appels terminaux pour les appels locaux, distants et mutuellement récursifs
  • Un message notimpl explicite pour du code Erlang valide qui nécessite une fonctionnalité pas encore implémentée

Runtime

  • Bibliothèque runtime en C++23 sans LLVM, liée à chaque programme
  • Entiers en précision arbitraire, flottants, atomes, tuples, listes, maps, bitstrings, records, funs, pids, ports et références
  • Processus, messages, receive sélectif, liens, moniteurs et noms enregistrés sur des threads ordonnanceurs
  • Tas par processus avec ramasse-miettes par copie et binaires hors tas
  • Ports pour les E/S standard, les fichiers, les sous-processus et les sockets
  • Exceptions avec try, catch et after, et traces de pile
  • io:format avec la mise en forme ~p d'OTP ; sous-ensembles de lists, maps, file et io

Projets et outils

  • Projets TOML avec cibles nommées, découverte des sources et options par cible
  • Projets de départ commentés avec clau --new-project
  • Une seule commande clau, du code Erlang à l'exécutable natif
  • Comportement vérifié par rapport aux sorties de l'Erlang/OTP de référence