These are two of the more interesting software projects I’ve come across recently so I thought a review would a good first post. They are advancing the state of the art of software development through metaprogramming techniques. The essential goal is to improve programming workflows by making it easier to build application specific languages which more efficiently enable problem solving in a specific domain. Their tools are like today’s integrated developement environment (IDE) on steroids. They help you craft a new language and then help programmers of that language build programs efficently using structured editing. Often the languages will generate code assets which are incorporated into a separate disconnected system. Multiple languages can be combined into a single generated end application to create efficient workflows.
The JetBrains MPS is in beta3 and they have good videos and samples on their site but I have only read the docs but I am very impressed by what I’ve seen. They have an IDE for building a new language in a very declarative manner: concepts, constraints, actions, generators – a tool is there to edit them all. You can provide a UI widget to display in place of the code for your concept to customize the developer’s experience. It seems like their goal is to sell more IDE licenses at a reasonable price and not monetize the runtime of any new languages built by MPS. By expanding the power of the IDE through new languages, they will increase the number of licenses they sell so it should be a good model for them. IntelliJ is an awesome tool (I am a recent convert thanks to the VIM plugin).
For Intentional Software the video linked to by Martin Fowler’s blog is the most detailed technical info I have found.
We have not seen any real details about their product or license terms but it looks bad for adoption. There has been no real visibility into the product design, and looks like they are headed towards a closed windows environment.
From the video of IS, I saw a very complete though complex environment. The IDE-like tool is demo’d both as a language design tool and a runtime tool for domain specific programmers. In the demo, formulae are entered into an application for actuaries. The user edits a document which represents his view of “the code” for the application. It operates in a very excel-like way – providing formula validation, testing and debugging all customized for this specific application. These are features programmed into the language definition, but you could almost see the IDE here as being the application itself. The system also supports code generation and editing of the same program via different language styles (projections). Because of the flexibility of the language and runtime, the potential for generating new languages which provide better partitioning of logic between programmer and business analyst is promising. Of course the challenge is designing such languages and apparently it is a lot of work given how long IS has been in stealth mode. No matter what, it will take a lot of training to use these new tools effectively.
It seems like you could build something like the IS actuarial demo on MPS but you’d need a really good developer who knew the system well for several months to pull it off.
One concern I have about both is that the model of the programs which they maintain on the disk is the raw model-layer of the program which must be edited through their tools. They do not save programs in a human readable format. This upsets the power balance between the IDE and the programmer – the IDE is charge for maintaining the integrity of the design. This is not great to me from an engineering perspective. If you are building a bridge is there a point at which you’d put the crane in charge? Just imagine branching and merging operations on two massively complex program graphs that have been heavily modified by different people. Apparently IS has a solution for this through custom versioning and collaboration but it is a tough problem to solve completely. Hopefully there is some modularity in there which at least keeps the language definition and the “domain data” (i.e. the actuaries formulae) separate so it is maintainable. These are complex tools but if they prove to be well designed, we could be looking at enablers of “the next big thing” in software development.