Open, Extensible Object Models
Programming languages often hide their implementation at a level of abstraction that is inaccessible to programmers. Decisions and tradeoffs made by the language designer at this level (single vs. multiple inheritance, mixins vs. Traits, dynamic dispatch vs. static case analysis, etc.) cannot be re- paired easily by the programmer when they prove inconve- nient or inadequate. The artificial distinction between im- plementation language and end-user language can be elim- inated by implementing the language using only end-user objects and messages, making the implementation accessi- ble for arbitrary modification by programmers. We show that three object types and five methods are sufficient to boot- strap an extensible object model and messaging semantics that are described entirely in terms of those same objects and messages. Raising the implementation to the programmers’ level lets them design and control their own implementation mechanisms in which to express concise solutions and frees the original language designer from ever having to say “I’m sorry”.