Mon Apr 20 10:20:12 CEST 2009

Eliminating Reflection

Funny how I started out being convinced about the possibility of deep
reflection as the one true way to build Staapl.  Ever since I started
to understand hygienic macros and phase separation in PLT Scheme I'm
leaning more towards the static side.  This journey has given me a
much clearer understanding of the reason why you might want to _limit_
flexibility: to be able to reason more about the structure of the
program without it this being a consequence of the program's dynamics.

At the one end there is mutable everything (Smalltalk style
reflection) and late binding (interpretation), possibly cached.  At
the other end there is declarative (once things are created, they
never change) and early binding (things don't get re-interpreted).

Compilers are quite straightforward.  The most important thing to
figure out is the order in which things are evaluated.  No better way
than to stick to non-cyclic structure and make linking of cyclic
structure explicit. (As opposed to let the program bootstrap itself
using mutation.)