@ -1,12 +1,64 @@
# TODO
## Development
This is in order of priority.
0. Implement Yvm.
1. Implement Yvm Interpreter.
* Implement permissions and capabilities.
* Implement translation of value names to indices and back.
* Have three stackpools:
* One for stuff allocated on the stack.
* Two for SSI values, to be switched between for every basic block.
* This is to put BB arguments in the right order.
* This requires that there is no "address of" instruction.
* Instead, everything that needs an address must be stack allocated.
2. Change Yao Standard Library to Have Keywords.
3. Change Yao Lexer and Parser to Use Packages.
* This includes using the `rig` package properly, with its own keywords.
4. Change Yao Lexer and Parser to Generate Yvm.
* Keep track of temporaries for each statment.
* Use those as feeders into the list of BB arguments.
5. Add Variables to Yao.
6. Add Control Flow to Yao.
* `if` statements.
* `for` loops.
* `while` loops.
7. Add Compiler and Platform Database to Rig.
8. Add Functions to Yao.
9. Change All Relevant Allocations to Use Stackpools.
* Obviously, if something needs to be dynamically allocated, it should be.
* But all dynamic allocations should have their root in a stackpool.
* Things that need to be dynamically allocated include:
* Things that might change size over their lifetime.
* Things that are owned by other things that are dynamically allocated.
* Etc.
* Also, make a way to attach mutex and other lock unlocking to stackpools.
* Probably allocate a pointer to the lock.
* Make sure to use a scope opener beforehand.
10. Add a Way for Users to Say Which Env Vars to Save with `rigc` .
11. Tie Config in with Build in Rig.
* Make the config constant.
* If the user wants to have choices, they should define multiple and pick
one when executing a target.
12. Bootstrap on Mac OSX.
13. Bootstrap on Windows.
14. Finish Cryptopals.
* This is for Yar.
## Before Release or Announcement
* Document the documentation code.
* Document the testing code.
* Rewrite things in Yao.
* Document the rewritten things.
* Make all programs output their source code.
* This is to fulfill the requirement to share source.
## Future
* Rewrite things in Yao.
* Document the rewritten things.
## Things to Add
* Make all of the optimization #defines (like `yallnonnull` ) disable themselves