Dynamic Aspects has published their upcoming OOPSLA presentation of domain/object, the language underlying their Java IDE. There is a remarkable correspondence between their ideas and my own. This makes reviewing their paper a difficult proposition: it would be easy to nitpick over differences; but it would be equally easy to falsely read my own ideas between the lines of theirs.
Their primary objective is a fancy Java IDE called domain/j that supports what I call semantic editing: direct manipulation of an abstract, non-syntactic model of a program. The IDE is implemented as an incremental bidirectional transformation between the syntactic and semantic structure of a Java program. The incrementality provides the same abilities as Eclipse’s incremental compilation: being able to get live semantic feedback while editing syntax. It is the bidirectional nature that is novel, allowing semantic level edits (which they call micro-refactorings) to be transformed back into syntax changes. This reverse transformation allows direct manipulation of the program at the semantic level.
Domain/object is the language that implements this bidirectional transformation. It provides facilities such as persistence, versioned execution, transactions, and bidirectional execution. At base it is a LISP-ish data-flow language embedded syntactically within Java. Eclipse internally implements some of the same capabilities, albeit in a more restricted form. For example, bidirectional transformations on the internal semantic model are supported through the mechanism of "live lists". Eclipse has internal persistence and versioning models as well. The point of domain/j is to provide these capabilities in a simpler and more general fashion by building them into a language, avoiding the massive complexity of the Eclipse API’s. Domain/j is essentially a Domain Specific Language for building IDE’s.
Domain/object is supposed to have a "live" execution model like Subtext, in which all code is always executing, eliminating the distinction between compile-time and run-time. But I do not understand how that is achieved, since it is embedded within Java and thus must be compiled prior to execution. Perhaps this is a meta-circular thing, whereby their Java IDE is lively interpreting the domain/object code. This would imply their IDE makes Java fully live, a significantly larger accomplishment than they seem to be claiming.
I wholeheartedly agree with the grand strategy they call "semantic computing", which (reading between the lines now) is what I call Structure Oriented Programming. The idea is to build systems through bidirectional transformations, combinations, and queries between different sorts of structures. It would be nice to construct typical business applications as a bidirectional transformation between a UI and a database. This is the kind of technology needed by DSL workbenches and Model Driven Architecture.
Where we disagree (nitpicking now) is on how conceptually elegant the language needs to be. I have been exploring along the same lines for a long time, but have so far found it to contain nasty semantic black holes that require ugly ad-hocery to avoid. I detect hints of the same problems in their paper, for example in handling the indeterminacy of reverse execution, and in handling the impact of asynchronous side-effects on the data-flow model of execution. I imagine they can come up with workarounds in the context of their IDE implementation, but I am less sure that the result is a clean and simple language that can be widely applied elsewhere. Perhaps they are clever enough to solve these problems – I look forward to seeing the details. Or perhaps I am just too finicky, and these are not actually problems in practice.
My approach to the problems of mutable state and side-effects is to develop a model of computation that treats time and change in a more tractable way. My intuition about bidirectional execution is that it should not be a universal property of the language, but of a select set of higher-level constructions. Benjamin Pierce has done some work that may be relevant.
In summary, Dynamic Aspects is doing some interesting and potentially important work. I am happy to find other people of like mind, and I wish them the best of luck. The one piece of advice I would give them is to tone down their claims, which are so dramatic as to invite skepticism. I look forward to attending their presentation at OOPSLA.