Adder: To-Do List

Compiler performance is poor.
This has been ameliorated by caching the generated Python code for modules, the way CPython caches .pyc files.
When an exception is thrown while compiling a module, delete the cache file.
Regression tests to test the things that are too hard to test in unit tests.
See thread at Hacker News.
Web framework
In progress. See .../adder/samples/web/. Problem: the Web server needs write access to .../adder/modules, and to the .py files therein, so that it can compile modules.
Cache the prelude
Already done in modules (it gets included statically), but not in scripts.
Logic programming
It would be very cool to give Adder a logic programming system. Initially a simple one, as described in the early chapters of The Art of Prolog, but it'd be nice to extend it to use a SQL backend. The system should include the ability to trigger arbitrary Adder code.
Return and yield in helper functions. Probably solved.
There are a few places where we use a helper function to solve the statement problem. E.g., (:=) and (if). We need to worry about return and yield—can't translate them directly, or we'll be returning from the helper. Currently working on this; tackling it by replacing with (return-from) and (yield-from). Problem: these work fine for (defun); for (lambda), there's no name. Add a :block arg to (lambda). Also to (begin).
Refactor and
Too many special cases; need to move that knowledge into the function classes. Ideally, this would make it easier for the function classes to do rewriting—it's absurd that they have to call each other instead of calling build with the lists they want.
Make (-gomer-try) work as an expr.
Depends on solving the statement problem, above. Probably solved.
Error reporting
Lots and lots of places where constraints are asserted. Should all be replaced with proper error reporting.