- Heap allocation and data structures (i.e. lists/vectors/arrays)
- Strings (these are just lists of Unicode characters)
- Tagged unions (these are definitely not in the specification, but they're great)
- Record types (also not in the specification, but still great)
- Pattern matching on tagged unions
- Automatic memory management (ideally using Perseus, but I might implement a simple tracing garbage collector to begin with) these two were easier than I though – it turns out that Cranelift can handle them
- Function inlining
- Mutual recursion (this isn't major - we'll just inline one of the functions)
- Making the compiler query-based
- Adding IDE support
- Automatic optimisation using a genetic algorithm or simulated annealing to find optimal settings
- Add a simple online playground for people to use the compiler
- Allow people to optionally submit their error messages for further analysis