The goal of this project is to transform a functional language that accepts programmer defined features (also known as macros), to x86 assembly and C.
The language M0 supports many common programming features such as the ability to define and apply functions, while loop, branching (e.g. if-else statements), etc.
More importantly, M0 allows programmers to define their own programming features, i.e. macros.
The ability to define programming features ourselves becomes relevant when we want to quickly extend a programming language instead of waiting for the next standard of the language to finalize and be implemented in the compiler/interpreter we use. In my opinion, compiler technologies such as babel has helped Javascript to advance faster than without it!
Say we want to make the (math) summation feature in our language:
That is, a programming feature that takes in
e.g.