
TODO
====

While the interpreter is already full-featured, there are still a few things
which would be nice to have in future releases.

(NB: These are just the most substantial wishlist items, which might well turn
out to be difficult or subprojects in their own right. Don't let this
discourage you from contributing smaller improvements if you notice any
shortcomings in the interpreter. -ag)

- Support for LLVM's debugging and profiling intrinsics to create code which
  can be debugged and profiled using external tools like gdb and gprof.

- Support for direct object (.o) file generation once LLVM supports this.
  This will make it possible to do batch compilation without having the LLVM
  toolchain installed.

- Better error recovery in the parser. Unfortunately, Pure's terseness makes
  this rather difficult. The current panic mode recovery seems to cope
  surprisingly well with most common kinds of errors, although it might catch
  errors much too late in some cases.

- Support for externals from languages with other calling conventions already
  fully supported by LLVM (Fortran, Ada?).

- Multithreading support. This requires thread-local data instead of globals
  in a few places, and synchronization where interpreter globals are used
  (most notably, runtime compilation and expression memory management). We
  also need to add the necessary support functions to the runtime.

- Better support for proper tail calls. Currently this only works for direct
  calls. See the manual for details.

- More aggressive optimizations (common subexpression elimination for "pure"
  a.k.a. side-effect-free function calls, unboxed specializations of functions
  which only deal with basic numeric data types, etc.).

- Support for Wadler views (or similar).
