Sunday, December 28, 2008

Foundational work on DSLs

Over the holidays I've been doing lots of reading and coding. It's been great.

I re-read Martin Fowler's writing on language workbenches. If you want a well written, crisp definition of language oriented programming, read it. Or, if you're struggling with what Oslo is all about, read it. Martin's work is foundational at describing what I believeto be  the future of programming and application building - what some have called language-oriented programming.

Oslo is here to enable this vision. Our language work brings a simple, easy-to-use notation for writing the abstract model that Martin talks about; we call that part of the language MSchema. Our language also enables the writing of DSL grammars over that model; we call that MGrammar.

Pay attention to fact that we do not talk about them as different languages - but as One. That's a key concept  that has yet to be exploited by our blogging community and by us, partly because we haven't yet done the work to integrate MSchema with MGrammar. But just wait. That's our longer term goal - to integrate both abstract model and DSL definition languages making Martin's inspiration a reality in a very easy to use way.

Add in a great tool like Quadrant to do textual and visual editing of both model and DSL, and the horizon of that vision is much closer than you think.

We'll be talking more about the integration of the language in the coming months.

4 comments:

Colin Jack said...

I'm really glad you guys are reading Fowler, I wondered if you'd read his post on the Semantic Model and if so how you guys approach creating semantic models in the context of Oslo.

Making the process clean, especially when the semantic model is a pre-existing domain model, would be very useful.

Pinky said...

I love Fowler's post on semantic models. Maybe I should use his terminology when I talk about M.

Here's a quick translation:
DSL == MGrammar
Semantic Model == MSchema
Data, or values of a DSL and a Semantic Model = MGraph

That's basically what my post is saying; we're bringing together in a single language an easy way to write both the semantic model and the DSLs for that model and the values produced.

Colin Jack said...

I have to get my head around this stuff again it seems, but can you use MShema for your semantic model if part or all of that model already exists as an existing domain model (written in C# for example)?

Pinky said...

In the limit yes. We don't have transforms from C# (or any other .Net language) to M yet.

To be clear, you don't have to give up C#. One of our goals is to be able to generate C# from MGrammar. In fact, we use to do that but moved to a data-oriented approach first by generating MGraph. We'll put that feature back in at some point - likely a code-behind model like XAML.