Wed Nov 30 10:11:42 EST 2016

Abstraction, compilation, caching

To allow high abstraction, one needs:
- compilation (meta-programming)
- proper caching of compilation results

Compilation translates high level description into low level
implementation, and can be (and should be?) towered.

High level:

- infinite memory model with garbage collection, closures,
  continuations, tasks and type systems that eliminate meaningless
  corner cases

Low level:

- state machines, cached code and data (obtained from higher level

Note that compilation allows (target) code and data to be treated in
similar ways: functionality can be partitioned into interpreter and
data in arbitrary ways that suit the requirements of the
representation (usually trading off execution speed and memory usage).