Subtext from Jonathan Edwards is an interesting development. Like Self [was linked to http://research.sun.com/self/ see http://c2.com/cgi/wiki?SelfLanguage now?] (and indeed Edwards cites Self as an influence in his FAQ), Subtext is based on prototypes; however it uses them both for structures (records) and for procedures. It also echos the morphic user interface, by firstly allowing direct manipulation of values, and secondly by making explicit visually the links between references and what they reference. The ‘program’ in Subtext is an editable representation of the runtime state.
Watching the demonstration movie, I have mixed feelings. While I have sympathy for the motivation behind it, I was dismayed by the amount of multi-modal interaction just to generate a factorial function, and the complex structure that results. Sure, like any language, thinking time decreases with experience, but input time is a constant overhead, and the runtime object tree looks no simpler to grok than an equivalent piece of code in a regular language.
As a programming language, a prototypical one even, it doesn’t live up to the talk just yet. The main thrust of the demonstration is that keeping lots of abstractions in one’s head is difficult, regular programming languages require a great deal of this, and Subtext doesn’t. Really what Subtext is doing is making the (runtime) wiring explicit, and most of this wiring is something programmers grasp without difficulty, and can certainly verify in a debugger. Further, the action/agent system reminds me strongly of monads — exactly what the author expresses a mistrust of in his manifesto, which seems a little dishonest.
Putting aside these misgivings, there’s reasons to be excited. At its heart, Subtext is about making programming languages more usable, which I can only applaud, and Edward’s statement of intent makes me optimistic that he’ll keep making gains.
As well, Subtext has plenty of lessons for IDE designers. Small touches, like the large arrows marking the current selection — why bother being subtle when that is exactly where the user’s attention will be? — and smart features, like setting a test case for a piece of code by freezing an example of the calculation.