[x] Fix recursive definition problems in grammar.clj TODOS for parser [ ] Make parser errors pretty [ ] Use synchronization to make parsing more robust [ ] Decide on synchronization tokens: [then else ] ) } , ; \n] TODOS from interpreter [x] implement tuple splat patterns [x] update match-list to use new AST representation [x] fix length comparison when pattern includes splats [x] update match-dict to use new AST representation [x] update match-struct to use new AST representation [ ] update interpret-receive to use new AST representation [ ] Check interpret-fn-inner ctx for cycles/bugs Re-add processes to the language [ ] Write send as function [ ] update interpret-spawn to use new AST representation [ ] ---- Investigate weird timing issue in current send implementation [ ] Investigate `with-bindings` and virtual threads Finish interpreter [x] Wire up new interpreter to repl, script situation [x] Merge new interpreter Conditionals [ ] Fix let bindings/scope in `if` expressions [ ] Make `and` and `or` special forms [ ] ---- `if and (let x ...)` pattern [ ] ---- arguments are lazily, not eagerly, executed Write a compiler: desugaring [~] `...` to `..._` in tuple & list patterns [ ] placeholder partial application to anonymous lambda [ ] word -> :[word] word in pairs (patterns & expressions) Write a compiler: correctness [ ] check for unbound names [ ] check for re-binding names [ ] check that recur is in tail position [ ] check that recur is only called inside loop or fn forms [ ] check ns accesses [ ] prevent import cycles [ ] splattern is last member in a pattern [ ] -----List/Tuple [ ] -----Dict/Struct/Set Write a compiler: optimization [ ] devise tail call optimization Next steps [ ] Get drawing working? [ ] Add stack traces for panics