Clause

Erlang/OTP 29, compilado a código nativo

Clause es un compilador anticipado (AOT) para Erlang. Preprocesa, analiza sintáctica y semánticamente el código Erlang, lo compila mediante LLVM y enlaza ejecutables nativos con su propio runtime: procesos ligeros, paso de mensajes y recolección de basura por proceso.

En desarrollo: un subconjunto creciente de Erlang ya se compila y ejecuta. La documentación indica qué funciona y en qué difiere Clause de Erlang/OTP.

Características

Características en detalle

Frontend

  • Preprocesado: macros, include, include_lib, compilación condicional y características del lenguaje
  • Sintaxis de Erlang/OTP 29: expresiones, patrones, records, bitstrings, tipos y especificaciones, control de flujo y comprehensions
  • Comprobación de sintaxis, salida del código expandido y vista indentada del árbol sintáctico
  • Diagnósticos de código fuente en varios archivos de entrada

Compilador

  • Análisis semántico: comprobación del subconjunto, ligado de variables, resolución de llamadas, tipos declarados e inferidos
  • LLVM O0, O2 y Os; objetos, IR y bitcode por módulo; instantáneas de IR anotadas con el código Erlang
  • Informes de tipos: código fuente anotado con las firmas de función inferidas
  • Llamadas de cola reales para llamadas locales, remotas y mutuamente recursivas
  • Un mensaje notimpl explícito para Erlang válido que requiere una característica aún no implementada

Runtime

  • Biblioteca de runtime en C++23 sin LLVM, enlazada en cada programa
  • Enteros de precisión arbitraria, flotantes, átomos, tuplas, listas, maps, bitstrings, records, funs, pids, puertos y referencias
  • Procesos, mensajes, receive selectivo, enlaces, monitores y nombres registrados en hilos planificadores
  • Heaps por proceso con recolector de basura por copia y binarios fuera del heap
  • Puertos para E/S estándar, archivos, subprocesos y sockets
  • Excepciones con try, catch y after, y trazas de pila
  • io:format con el formato ~p de OTP; subconjuntos de lists, maps, file e io

Proyectos y herramientas

  • Proyectos TOML con objetivos con nombre, descubrimiento de fuentes y opciones por objetivo
  • Proyectos iniciales comentados con clau --new-project
  • Un solo comando clau del código Erlang a un ejecutable nativo
  • Comportamiento comprobado contra las salidas de Erlang/OTP de referencia