- Write initial version of interpreter
- Write language specification
- Write documentation for compiler/interpreter/what-cha-ma-call-it
- Use each element in at least one sample spec
- Better names/documentation for sample specs
- Optimize value invalidation for stack control and similar
- Detangle the mess that is the compiler (i.e. make it not shite)
- Add multiple levels of verbosity? Perhaps a more detailed printout of internal state?
- Do some form of testing, besides basic manual tests
- Implement shebang support (i.e. get the compiler to ignore it)
- Allow stdin to be defined from positional file argument (but not stdout?)
- Add flag for execution without stdin, really only useful with -o or -z
- Allow arbitrary default values, via --ignore-eof XX, where XX is 2 digits hexadecimal. no, use --generate XX, maybe base 18?
- Add default values that count up from 0x00 instead of a constant value
- Add a delay mechanism? ($ for sleep? P for pause?) How? Options are read/peeked from stack, different delay per side, something else?
- Implement loop detection during cycle execution; warn to stdout, and return 0 immediately?
- Maybe: Implement memoization during cycle execution (can be done manually via cache elements (K))
- Optimization: Implement iterative calls for polling, rather than recursive
- Add debugging elements (X for examine?)
- Add mirrored adder, perhaps @
- Add bookmarking/looping, (V?) when marker is powered it marks a jump-back point. When unpowered, jumps to that point. Multiple may be used, also, may jump forward if previously jumped back
- Optimization: In case of output suppression S, skip polling output bit elements, since they become unnecessary
- Add pulse element (!?), on for first tick of execution, then off for all remaining cycles. For init stuff.
- Add shift elements, wires that connect diagonally (LR?), variant 1 connects n-w and s-e, variants 2 connects n-e and s-w
- Change stack to have a split head, one for reading, and one for writing
- Maybe: Add second stack (with unicode numberish elements?) (also second queue, and mixed queue+stack / stack+queue)
- Maybe: Add queue mode instead of stack mode (two queues? queue+stack?)
- Maybe: Add addressed memory mode instead of stack mode (using second stack elements as addressors?)
- Maybe: Add edge detector(s) (Nn?), on for only one tick when signal changes... rising/falling, left/right, ...?
- Add jumpers (jJ?) to connect anywhere within current layer
- Add caching/once-only elements (Kk?) that only poll neighbors once per cycle
- BUG: empty spec is an error, but because of index error -- allow empties
- BUG: empty lines at beginning of layer are trimmed, only valid if empty on all layers
- BUG: fix wire loop polling; it is highly inefficient, and sometimes incorrect. May be partially solved by general loop detection
- Add command line parameter to terminate input after N bytes (-cN)?
- Add lexeme/element listing to help/usage message
- Update from optparse to argparse (remember RawDescriptionHelpFormatter)
- Reevaluate StorageControl -- does it really need to be more complex than Control?
- Maybe: Improve efficiency of Cache (K) by caching in-values for each side as well as / instead of out-values
- Centralize all registerInternal priorities's, to get rid of magic priorities, just use an ordered list instead
- Make elements with pollInternal callable
- Optimization: Add age to memory elements, so that it's pollInternal is called once (wait, would this actually be correct?)
- Make return value of board.run into a named tuple
- Asynchronous input (run ticks w/o input, but still allow input) (needs dead values, probably set by -g?) (settable tick speed, or must do so inside program?)
Ii Qq l r Uu Ww Yy % & _ "