diff --git a/Roadmap.md b/Roadmap.md index aadde02..832af5a 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -1,24 +1,35 @@ # Roadmap +## Near-Term - Finish compiler implementation (parity with interpreter features) - Array pass by reference - Work out how to evaluate expressions with only constants within the compiler so array dimensions no longer need to be literal constants +- Write a non-trivial app in EightBall to discover the pain points + +## Medium-Term - Wishlist features: - - Multidimensional arrays (implemented as array of pointers to array). + - Multidimensional arrays + - 2D array is implemented as array of pointers to arrays of `word` or `byte`. + - 3D array is implemented as array of pointers to array of pointers to arrays of `word` or `byte`. + - etc. - Array initializer lists: - `word xyz[3] = {123, 456, 789}` - String initializer: - `byte qq[10] = "abcde"` - will also add null terminator to string + - A way to pass string literals as subroutine arguments - Module system - Would be good to make bytecode relocatable by using relative addresses - Need to add new relative jump / branch instructions for this) - Drawback is it makes the code harder to read for humans, but this can be overcome with better tools - Need to think about how a module system should work -- Write a non-trivial app in EightBall to discover the pain points - Optimize virtual machine bytecodes, based on study of real code - For example, it would be good to have an instruction to drop n bytes from call stack rather than repeated `POP`, `DROP` as the compiler currently does. -- High performance VM: hand-coded in 6502 assembly +## Long-Term +- High performance VM + - Hand-coded in 6502 assembly + +# Ground Rules Features will only be added if: 1. They do not increase the code size so much that it is no longer practical to run EightBall on Apple II and C64. (VIC20+32K is already a tight fit.) 2. Language features must have both an interpreter and compiler implementation. \ No newline at end of file