We have ignition: an actual implementation of an actual language. Toy-like in the extreme, but it can run the sorts of simple examples I have been discussing the last few years. I think I can take it all the way to a prototype application framework. This is huge progress.
For me, the breakthrough has been finding ways to avoid solving problems. I was paralyzed for years by deep issues in the semantics of effects. I came to realize that settling these issues required first getting getting practical experience with this new style of programming. A chicken-and-egg dillema. The solution was to defer everything I could and go with the simplest thing that could possibly work. So for example I have totally punted on types, and my effect system is computed on the fly at run-time. A compile-time effect system will be essential eventually, and I can’t yet guarantee that it is actually possible, but I don’t need it right now to build a working prototype.
Java has worked out great. I can code in it practically without thinking, which is a good thing, because the problem I am solving already stretches my old brain past its limits. Likewise with language processing tools – I considered Stratego and Antlr, but ended up with parboiled . It is a really nicely done lightweight parsing library, with great Java support through bytecode rewriting magic. The compiler probably would have been a third the size in Scala, but at under a thousand lines it doesn’t matter.
I am going to keep coding until I can demo an actual application. I didn’t submit an Onward paper because I am burnt out on papers talking about what I want to do in the future. My next paper will be about what I have already done. I will probably submit a demo to OOPSLA. I am doing a talk at the beginning of June, and I’ll post the slides here.