Modular Generation and Customization

The adventure in blogademics continues: I have posted a draft of my next paper. Comments are welcome – the deadline is 5/19. Thanks to everyone who supplied references in response to my last post – you are in the acknowledgments.

Update – the link above is to the final version, pusblished as a tech report. I should add for those familiar with my UI work that there is almost no UI in this paper. I am trying to motivate and explain the model underlying my last two papers. It’s not just about ease of use – it is also about expressive power.

Galactic Premiere of Subtext 2

Here I am live-blogging myself at OOPSLA. I guess you know you have arrived when you get heckled by Guy Steele. Actually the talk seemed to go over pretty well.

I have posted a video of essentially the same talk. As always, comments welcome.

First Class Copy & Paste

I have posted a draft of my latest OOPSLA submission: First Class Copy & Paste. As always, comments are welcome.

I apologize that this paper is so hard to read. It is very technical and formal, and all about internals, not the user interface. I felt that I needed to precisely define how Subtext works, both for myself, and for others who want to try to do something similar. A secondary goal was to document the idea of hypothetical computation that is in the demo. I also added a cool new idea: transactional concurrency. But few people will wade through the technicalities to get to that part. I probably should write a more accessible paper about hypotheticals and transactional concurrency.

Now Playing

I have produced a Flash video of my upcoming OOPSLA presentation. It is divided into two parts, both about 15 minutes long. The first part recapitulates the previous video of building a factorial function. There are some new features, but if you already watched the older video, you can skip it without missing much. The second part demonstrates my new approach to I/O and mutable state.

I am excited about this development, not only because it addresses a big problem lacking good solutions, but also because it is going beyond “mere” usability issues. It has been easy up till now to dismiss my work as just repackaging standard language semantics into a different user interface. Now I am starting to show that fundamentally changing the way we represent programs can fundamentally change the way we think about them.

As always, please let me know what you think.

[10/24/05: updated the slides at the very end to match what I actually presented at OOPSLA]


My little screencast has now gotten over ten thousand hits. Amazing. It seems there is a large pent-up desire for a better way to program. I have gotten lots of positive feedback, much of it endorsing not so much the particulars of Subtext as that I am making an attempt to improve things. Thanks to everyone.

I have also triggered some fairly negative reactions. I take this response also as a positive sign, that my work is threatening enough to warrant a backlash. I have written an FAQ to answer some of the recurrent criticisms.

This might be a good time for a progress update on Subtext. I have decided to change direction somewhat. I was previously working on “getting factorial right” with new representations for conditionals, iteration, and higher-order functions, as described in the Future Work section of my OOPSLA submission. I now think I should shelve that and instead face the issue of I/O and mutable state. This nasty problem has been the bane of much programming language research, particularly leaving functional languages tied up in knots. It could be the critical issue that makes or breaks Subtext. My new goal is to show how to build a GUI in Subtext, and to do so while maintaining the principles of WYSIWYG and the unification of edit-time with run-time, just as with factorial. I haven’t figured out all the details yet, but if I can pull it off it would make an eye-opening demo, and also make Subtext dramatically more realistic and relevant.