Sadly this doesn't mean that we're quite to self-hosting just yet. Only about a third of the compiler test suite is passing, and a lot of the remaining work centers around getting the parser finished and rigging up the code generation to the AST traversal logic.
As you may or may not recall from previous updates, the code generator is already done and capable of generating the full Epoch compiler given a properly formatted AST; so what's remaining here is just glue between parsing and the code generation system to get it to where all the tests pass again and we can try the evil experiment of feeding the complete compiler into itself.
There are a number of parser features left to complete before this can happen:
- Parenthetical expression support
- Literal function parameters (used for pattern matching)
- Higher order functions
- Entities (flow control, etc.)
- Function tagging
- Sum type definitions
- Some literal cleanup (floating point support being the biggest one for now)
- Overload resolution
- Type inference for assignments and parenthetical expressions
- Chained assignments
- Function pointer members in structures
- Pattern matching on values
- Pattern matching on types
- Template support
- Some built-in operators and functions
- Type demotion (e.g. integer -> 16-bit integer where appropriate)
- Standalone code blocks
- Batch test framework
- Executable binary generation
On the one hand, this amounts to a whole lot of work; on the other hand, it's a measurable checklist and I still have until the end of the year to hit my personal deadline for the project.
It's actually kind of a relief to see a finite list of things left to knock out. "Write a self hosting compiler" is kind of a tall order, and to finally be in a place where the end is clearly in sight is a great feeling.
There are also some other reasons for me to be excited about the future of Epoch, but I can't really go into detail just yet. Stay tuned, life's about to get interesting.