On the second official day of the PDC 2008, me and many colleagues from the Dutch .NET community attended the introduction session titled “A lap around Oslo”. Up to this session, Oslo was something nobody really knew about other than that is was somewhat related to the next evolution of SOA and Domain Specific Languages.
So what is Oslo really? Well, the answer is not really that simple. As a matter of fact, after finishing the session, both me, Dennis Vroegop and Alex Thissen were still a bit unsecure about what it really was. And even after attending the subsequent session by Don Box, we still had a lot of questions. But after some hefty discussions we managed to get our ideas aligned, at least, as far as we could tell. So to make sure we were right, we went to the Pavilion where Microsoft had setup many technical booths, and talked to Douglus Purdy, the host of this session. And as a matter of fact, it looks like we were right indeed. “So then, tell me”, I hear you think…
At a high level, it is the combination of two tools codenamed “IntelliPad” and “Quadrant” (see screenshot), a few compilers, the “M” programming language and a database repository. M can be used to write a text-based Domain Specific Language (DSL) consisting of data structures and language grammar, and let that compile, through some intermediate steps, into a XAML file representing an object graph consisting of expressions and statements. For every DSL, you need to create a runtime engine that knows what to do with that XAML file. Moreover, a shared characteristic of all those DSLs is that both the structure of the language as well as the domain-specific data is stored in a central SQL Server repository.
An example of such a DSL is what Microsoft calls “mschema”. This ‘language’ allows you to ‘sketch’ the structure of a business domain model by specifying values and relationships using a very simple syntax. The corresponding compiler will infer the formal data structures from that and generate a XAML file representing the values and structure of the domain model. This compiler will also execute the necessary T-SQL to setup the corresponding tables and columns for you. The runtime can then be used to execute various LINQ-style queries on the data or insert new data using another DSL called “mgraph”.
Another example of a working DSL is “mservice” what was what we were waiting for when we entered the session. It basically represents a textual domain-specific language for defining WCF services where the implementation is handled by a Windows Workflow. From what we saw, it was very powerful. With just a few lines you can setup a few operations and an endpoint, and define a fairly straightforward workflow without the need to use any activities or other WF-specific artifacts. In this DSL, the runtime is responsible for dynamically creating a WCF service, setting up the endpoint and required binding configuration, hosting the WF runtime environment and injecting the workflow matching the language. Even better, the entire implementation of the service operation is handled by this same runtime.
So how do Quadrant and IntelliPad fit into this? Well, IntelliPad is a textual tool to write the DSL itself, to query for or update/insert domain-specific data, and to preview how this all ends up into XAML. Quadrant is a very powerful graphical tool written in WPF that you can use to visualize the domain-specific data in almost infinite different ways, even if they originate from a completely different DSL. So if you combine for instance “mschema” and “mservice”, you can build a running service-oriented architecture just by using the visual designer.
As a matter of fact, the entire tool, including configuration settings, UI elements such as the Ribbon, and its visualization engine can be modified by drilling down through the models that make up the application. It’s like the ultimate meta-meta tool. So apparently, Microsoft has used their own “M” language to create DSLs for the different aspects of this application. However, as of now, it is still a bit vague what role “Quadrant” is really intended to play. It is at a minimum a developer tool, but it should be possible to customize it (again, visually, not with coding) to turn it in a very powerful exploratory data viewer.
Is this all? Not really. In fact, even after the many discussions we had, there are still some aspects we are not entirely confident we get yet.
- The “M” language specifies ways for defining data structures that you can use in your DSL. But is that the same as “mschema”? And if so, can use “mschema” in your own DSL to have a nice composable way of reusing DSLs?
- How does “mgraph” fit into this? Is it just another DSL written with “M”? Or is it part of the “M” language specification itself?
If anybody could enlight me on that, I’d love to here from you…