Meta assembly language aims to provide the developer flexibility to adjust every step of the compilation process. Tokenization, parsing, type checking, optimizations, instruction generation, and binary output should be accessible and augmentable.
The compiler currently includes a basic implementation of all of the compilation steps and a provisional syntax. Right now, the work is focused on turning the compiler into a library that the user can use from the language itself. It is very much a work in progress, but the target workflow should, in the end, look like this:
A developer creates a bootstrap file using the default syntax/pipeline of the compiler. This bootstrap file is then JIT-compiled and executed by the compiler binary. Inside of the bootstrap file, the compiler functionality is exposed as a set of functions. The API should include high-level calls like `compile("/foo/bar.mass", X86_64, PE32)` to being able to get something running quickly. At the same time, a user can use more low-level ones like `tokenize(code)`, `parse(tokens)`, etc. This way, it is possible to inject extra steps or replace parts of the compilation pipeline.
To ease the usage of the compiler as a library and later on bootstrapping, it is written in C11 with no external libraries apart from LibC and my custom utility library. A large portion of the coding is recorded and posted as videos on YouTube.