The time has come to stop writing papers and start releasing code.
This last paper is a turning point. I now know enough to start building something more solid than a demo. The fundamental problem of mutable state and effects has been blocking me for years, but now I finally have an approach that fits with my other ideas. I had a sort of monadic approach in Subtext 1 but it just wasn’t good enough.
The other breakthrough for me is syntax. The paper seemed to present a textual programming language, but that was an artifice. I have come up with a syntax that is IDE-equivalent, isomorphic with IDE operations. Yet it looks like code from a distance. I think I have found where syntax belongs: in the IDE, and only in the IDE. The keyboard is a very efficient input device, so having a way to type in syntax is effective. Likewise we have highly developed mental skills for reading and understanding grammatical text. I am using text as a UI mechanism, not as a representation. The internal representation is still in terms of semantic data structures as in Subtext, and more specifically, as first-class differences between structures. Text is ephemeral, not the source. The biggest difference is revealed in names – they can be ambiguous, and it is even possible to refer to anonymous structures. Humans are really good at disambiguating by context. Computers aren’t, so the IDE will ask you to clarify ambiguous names when you enter them. There are no source files, and no compiler, only an IDE on top of a persistent data model, yet you can still read and write code textually. As I said in the conclusion of the paper, it is important to satisfy both verbal and visual thinkers.
The other win with this treatment of syntax is that it lets me decouple the IDE from the interpreter. My next step will be an interpreter with a textual REPL, as in the paper. I think of it like the console inside many games: an internal hacker’s interface. I will still need to build a fancy IDE to do cool demos. But I won’t need an IDE to play with the interpreter, and I can get it out faster.
I hope a working prototype that other people can play with will open up new avenues for communicating and collaborating. That is what people have been telling me here for years, but now I am finally ready.