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.