What in the world is “language-oriented programming”?
I’ve been programming in Racket for a few years now, but Racket’s
solve problems, make languages philosophy wasn’t the main thing that attracted me to the language. At the time, I was just looking for something more up-to-date than Common Lisp.
Only later did I get a sense that Racket ticks a bit differently, powered by an underlying philosophy called
It may be surprising to learn that my first reaction to this term wasn’t entirely enthusiastic.
Language-oriented programming is one of those things that sounds great—initially—but which lost its shine as I began to think about more about it.
I found it frustratingly vague. Maybe even a bit pompous.
Are they serious? (Does some research. OK, they seem serious.)
What in the world do they mean by that?
Is it just a high-falutin’ way of saying
we use macros here? Are they talking about little embedded DSLs only, or notational tricks (
hack the reader)? And what about the practical scope of
language-oriented programming? Was it a value judgment? Do they mean to say that your modest module isn’t cool enough because it’s not a full-blown language? Is it a design suggestion? Are they saying that most problems should be solved with new languages?
Most frustratingly, I couldn’t find a single resource that encompassed what was becoming increasingly clear in my research: that the term seemed to be wide enough in scope that it admitted different interpretations. Different ways of giving the term life. Different instantiations.
So I went out into the Racket world and asked Racket programmers what they thought it meant.
Excuse me! You, sir. You work in Racket, right? Tell me: how do you understand
I probably scared away a few people when I approached them with this crazy-guy-at-the-train-station routine (
who are you again?
how do you know so much about my Racket work?!), but a number played along.
My forthcoming book, Language-oriented Programming in Racket: A Cultural Anthropology, contains the results of surveying 30 Racket programmers, including some of the language’s core developers, about what language-oriented programming means to them. I designed a 9-question survey focusing on different aspects of LOP. (Icing on the cake: Martin Ward, who coined the term
language-oriented programming back in the 90s, has agreed to write a foreword for the book.) I think you’ll find it a useful resource for getting an in-depth view of the philosophy that drives Racket.