
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 en varios hilos planificadores, paso de mensajes, puertos y recolección de basura por proceso.
En desarrollo: los programas Erlang/OTP 29 se compilan a ejecutables nativos que ya se ejecutan en Windows y Linux, con stdlib, kernel, crypto y ssl propios de Clause. Pendiente: macOS con Apple Silicon y hardware ARM nativo, los propios conjuntos de pruebas de OTP, las ubicaciones de archivo fuente y línea en las trazas de pila y más optimización; no se admiten la distribución ni la carga de código en caliente. La página de benchmarks muestra la posición de Clause frente a OTP; la documentación indica qué funciona y en qué difiere Clause.
Características
OTP 29
Sintaxis moderna de Erlang
Preprocesa y analiza código fuente Erlang/OTP 29, records nativos incluidos.
1,49× más rápido
Velocidad frente a OTP
Media geométrica de 31 kernels de prueba, Clause -O2 frente al JIT de BEAM.
clau -o app
Ejecutables nativos
Un comando del código fuente Erlang a un programa autónomo, compilado mediante LLVM con optimización en tiempo de enlace. Escripts también.
spawn · send · receive
Procesos Erlang
Procesos ligeros con recolección de basura por proceso en varios hilos planificadores.
gen_server · ssl
Biblioteca de OTP
stdlib, kernel, crypto y ssl propios de Clause con las exportaciones, los resultados y los errores de OTP 29.
gen_tcp · file · os
Puertos y E/S
Archivos, subprocesos y sockets TCP/UDP en un único hilo de E/S basado en eventos.
--print-types
Inferencia de tipos
Con O2, los tipos inferidos eliminan comprobaciones en tiempo de ejecución y seleccionan código especializado.
clau --shell
Shell interactiva
Enlaza la shell de Erlang en un ejecutable: erl_eval, historial y records, sin BEAM.
7 plataformas
Multiplataforma
Funciona en Windows x64 y Linux x86-64; objetos para siete plataformas.
Características en detalle
Frontend
- Sintaxis de Erlang/OTP 29: records, maps, bitstrings, comprehensions, tipos y especificaciones
- Macros, includes y compilación condicional
- Parse transforms sin instalar Erlang/OTP: ms_transform, qlc, merl y las propias
- Especificaciones ASN.1 compiladas en módulos como lo hace asn1ct: BER, DER, PER y UPER
Semántica de Erlang
- Coincidencia de patrones y guardas en cláusulas, case, if y receive
- Records, funs, maybe y comprehensions de listas, binarios y maps
- Excepciones con try, catch y trazas de pila
Compilador
- Inferencia de tipos con tipos de función por cláusula
- LLVM O0, O2 y Os, con optimización en tiempo de enlace entre módulos
- O2 elimina las comprobaciones de tipos que la inferencia demuestra
- O2 integra en línea funciones locales pequeñas, funs conocidas y bucles de lists
- Llamadas de cola propias y recursión profunda
- Generación de código en paralelo en todos los hilos de hardware
Runtime
- Runtime en C++23 con todos los tipos de términos de Erlang, incluidos enteros de precisión arbitraria
- Procesos, receive selectivo, enlaces, monitores y temporizadores en varios planificadores
- Montículos por proceso con un recolector de basura por copia
- Tablas ETS concurrentes en C++
Biblioteca de OTP
- Módulos OTP 29 propios de Clause con las exportaciones, los resultados y los motivos de error de OTP
- gen_server, gen_statem, gen_event, supervisor, application y logger
- stdlib: lists, maps, string, binary, json, re, rand y los módulos de colecciones
- ets, dets, disk_log, zip y erl_tar con archivos tal como OTP los escribe
- erl_scan, erl_parse, erl_lint, erl_eval, qlc y compile en tiempo de ejecución, con los módulos compilados interpretados
- syntax_tools: erl_syntax, erl_prettypr, epp_dodger y merl
- kernel: file, gen_tcp, gen_udp, inet, inet_res y os
- crypto sobre OpenSSL con modo FIPS; public_key con validación de rutas de certificados, CRL y OCSP
- ssl: conexiones TLS 1.2 y 1.3 sobre libssl de OpenSSL
Proyectos y herramientas
- Un solo comando clau del código fuente Erlang a un ejecutable nativo
- Proyectos TOML con cachés de compilación SQLite
- Shell interactiva de Erlang con clau --shell
- Información de depuración con -g (CodeView o DWARF 5) y perfilado con --profile
- Probado frente al Erlang/OTP de referencia y comparado con OTP en benchmarks
Clause