Language oriented programming (LOP), is an idea that has been around for at least 40 years within the Lisp/Scheme community. I believe it was first given the name in 1994 by Martin Ward. The earliest article with the term “Language oriented programming” I can find is this one: http://citeseer.ist.psu.edu/151498.html. Ward’s article was aupdated in 2003 : http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf. LOP has been getting some attention lately due in large part to Martin Fowler’s essay on Language Workbenches: A Killer App for Domain Specific Languages.
A lot of the work on LOP has been focused on language toolkits (e.g. libraries, editors, workbenches). A closely related idea is Charles Simonyi’s concept of Intentional Software (http://www.intentsoft.com/technology/IS_OOPSLA_2006_paper.pdf). To be perfectly honest I am skeptical whether intentional programming is truly distinct from language oriented programming In the software engineering community a similar approach Language Driven Development has been gaining traction as described in the online book Applied Metamodelling : A Foundation for Language Driven Development, there is some recent discussion of the book at Lambda-the-Ultimate.org.
The idea of language oriented programming frequently resurfaces in the collective programmer conciousness. For example a recent article by Markus Völter, Architecture as Language: A story, posted on InfoQ, proposes the language oriented programming approach to model-driven architecture without naming it or referring to any tools. This spontaneous recreation of an idea for me is an indicator that it has real substance.
I am not a big fan of language workbenches or the general principle of relying on tool support for my development processes. I am an old-school Atari 400 hacker and I am used to nothing but an onion-skin keyboard, and the simplest of text editors. I feel that if you can’t do it in text, then forget about it (hence my recent energies devoted to creating a textual mapping of xUML). This is why languages that can be dynamically extended to include the syntax and semantics of radically different programming languages, such as XMF and Kathadin, are so interesting to me. You can work with them from the simplest of command lines.
I have proposed the term “Superlanguages” to describe these kinds of languages because they effectively provide a sueprset of the syntax and semantics of other languages. This term appealed to the creators of XMF who are using it to describe XMF. I might have used the term metalanguage because these are languages for definign languages, but this term is already used. ML as in the ML family languages stands for meta-language (e.g. ML, SML, CAML, OCAML). In the language theory community a metalanguage is any language used to define the semantics of another language, but usually not the syntax. An interesting area of research might be the usage of superlanguages as formal descriptions of both the syntax and semantics of a programming language, but I digress.
The idea of a superlanguage is different from languages with a simple metaprogramming protocol such as Common Lisp, Ruby, and Python. For example you can’t write the following C-style DSP within Lisp with seriously hacking the reader macros essentially requiring you to write your own C parser:
int fib(int x) {
if (x <= 1) return 1; else return fib(x - 1) + fib(x - 2);
}
This was part of a series of challenges I gave the XMF language creators to see if they are really doing something interesting (as opposed to reinventing Lisp), and it turned out that they were. What perhaps excited me most about XMF is that it has been used in commercial development, clearly demonstrating the practical value of language oriented programming in general.