Skip to content

Latest commit

 

History

History
48 lines (47 loc) · 3.87 KB

TODO.md

File metadata and controls

48 lines (47 loc) · 3.87 KB

Todo list

  • 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?)

Unclaimed simple ascii

Ii Qq l r Uu Ww Yy % & _ "