diff --git a/Roadmap.md b/Roadmap.md new file mode 100644 index 0000000..5b30f44 --- /dev/null +++ b/Roadmap.md @@ -0,0 +1,20 @@ +# Roadmap + +- 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 +- Wishlist features: + - Multidimensional arrays (implemented as array of pointers to array). + - Array initializer lists: + - `word xyz[3] = {123, 456, 789}` + - String initializer: + - `byte qq[10] = "abcde"` - will also add null terminator to string + - 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 \ No newline at end of file