Steve Yegge's The Pinoccio Problem describes a very special type of program: one that not only fulfills the original purpose of its creators, but also is capable of performing arbitrary, user-defined computations.They typically also host a console, by which one can reprogram the software on runtime, maybe persisting the modifications.I find this problem very hard to reason about - there seems to be a conflict between implementing the 'core modules' of a program, and making the system really implementation-agnostic (i.e. no functionality is hard-coded).So, how to architecture such a program - what techniques can help? Is it a well-studied topic?
Designing extensible, interactive systems
architecture;extensibility