Erlang compiler and IR implemented in Rust
Current features:
- Unified Thorin based IR representation named Eir
- Erlang frontend
- Core frontend
- Pattern match compilation passes
- Basic optimization and cleanup passes
- Naive interpreter used for testing
The project is split into several crates:
libeir_ir
- Contains the core Eir IR data structures, validation, printinglibeir_syntax_erl
- Frontend for Erlang, lowers to Eir.libeir_syntax_core
- Frontend for Core Erlang, lowers to Eir.libeir_passes
- Compiler passes operating on Eir.libeir_lowerutils
- Utilities for lowering Eir to SSA form.libeir_interpreter
- Naive interpreter for Eir. Used to run OTP test suites.libeir_intern
- Symbol interning. Used by most other crates.libeir_diagnostics
- Source span handling and diagnostics printing.libeir_util
- Kitchen sink of utilities used by other crates.pattern-compiler
- A generic pattern matching tree compiler.tools
- CLI tools used to work with the IR.