Language Workbenches: The Killer-App for Domain Specific Languages?

(via the LtU DG)

Martin Fowler writes,

Most new ideas in software developments are really new variations on old ideas. This article describes one of these, the growing idea of a class of tools that I call Language Workbenches - examples of which include Intentional Software, JetBrains's Meta Programming System, and Microsoft's Software Factories. These tools take an old style of development - which I call language oriented programming and use IDE tooling in a bid to make language oriented programming a viable approach. Although I'm not enough of a prognosticator to say whether they will succeed in their ambition, I do think that these tools are some of the most interesting things on the horizon of software development. Interesting enough to write this essay to try to explain, at least in outline, how they work and the main issues around their future usefulness.

When I was learning to program, we simply called these things good programming...

Seriously, much as I like DSLs and am happy to see more people think about the role of language design in software design, I think it is important to stress that good sofware design comes from familiarity with a large set of techniques. Language oriented techniques are useuful, but they aren't a panacea. They deserve wider recognition, being almost totally unknown in the wider programming community compared to other techniques (e.g., patterns), but shouldn't promise more than they can deliver.

I vaguely remember a long "tutorial" we linked to a couple of years ago about becoming a professional programmer, which included language design along with other techniques one must master. If this rings any bells, please post the link since I don't remember any more deatils...

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

How to be a programmer - Robert L. Read

I vaguely remember a long "tutorial"

... maybe?


Yes, that the one.

Lisp example

There has been some discussion about Martin Fowler's article in the Lisp community. Here are the most interesting contributions:


Don't forget

Patterns and Language Design... same thing?

I'd argue that Patterns *are* language design. A programming language "linguifies" patterns used in earlier generations of languages.


Procedure calling in 3GLs lingifies the pattern used in assembly programming to make reusable routines by passing parameters on a stack.

Records and arrays linguify patterns of using data segments in assembly language.

C++ virtual function tables lingify how programmers implement runtime polymorphism in C and Pascal using jump tables.

C# using blocks linguify how one has to clean up resources in Java using try/finally (not to imply that C# is a copy of Java!)

Etc. etc.

I'll let LISP programmers gloat about how they don't need to change the language to incorporate new patterns.