Incremental/single-pass based compiler, the API can be either used for Single-Pass Compiling and for building LSP, or things that would need incremental pipelines. It's a study project of mine for studying incremental compilers and package-managers.
The project is still being developed, and the table of contents is:
The objective of this project is:
- Dealing with language-servers, and direct support for Visual Studio Code
- Having a full-featured CLI for building, and packaging libraries for Asena
- Lowering to LLVM-IR, and executing JIT
- Error-resistant compiler, like having a compile-time error, and still can compile, because the error fall onto the runtime
- Interpreter for basic things like macro-expanding.
- Query-based architecture.
It's all based on the articles:
- Resilient parsing
- Typing Haskell in Haskell
- Sixty
- Query-based compiler architetures
- Rust
- Crafting Interpreters
- Semantic
- Data types à la carte
- Salsa
And have some great inspirations in rust-analyzer code-base..
The goal of this compiler isn't optimizing things, it's more like an IDE, so the garbage collector is based on Reference Counting.
This compiler haves a giant base in procedural macros for generating stubs and trees.
Asena is distributed under the terms of the MIT license.