A programmable programming language

A programmable programming language

Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay McCarthy, and Sam Tobin-Hochstadt. A Programmable Programming Language. Communications of the ACM 61, pp.62–71. 2018.

Lisp has been described as a “programmable programming language”: the fact that Lisp code is valid Lisp data and can be manipulated as such, coupled with macros, makes it easy to construct new Lisp variants in Lisp, and to combine them with “real” Lisp in interesting ways.

Racket is a Lisp that takes this to its logical conclusion, making domain-specific sub-languages into first-class objects that can be freely interleaved within programs and can be matched to the “natural” expression of the target domain. The languages don’t even have to be Lisp-like.

In the ideal world, software developers would analyze each problem in the language of its domain and then articulate solutions in matching terms.

Racket languages are formed of two parts: a reader that turns strings into properly bracketed S-expressions, and an expander that turns these expressions into “real” Racket (or some other Racket-defined language).

This flexibility adds a whole new level to Lisp programming. For example, it allows languages that don’t readily translate to Lisp style to be implemented and integrated into Lisp. This may simply be for user convenience, or may have some deeper semantic structure. Racket also defines clean interfaces between languages, which is what allows them to be combined. It’s a deeper version of the usual Lisp multi-paradigm approach, reaching out beyond macros working on Lisp syntax.

Stasiland: Stories from Behind the Berlin Wall

Anna Funder (2003)

A view of East Germany by a semi-outsider, an Australian living in the East. Perhaps this gives a better perspective.

The Stasi come across in this book as the most dedicated and efficient secret police force imaginable. They want to known everything – to the extent of imprisoning one of their own agents for not reporting something that he knew would get him into trouble – and co-opted a large fraction of the East German population to report on their friends and families, even when those reports served no purpose other than simply to be reported.

It’s surprising how many former Stasi men (and they were all men) Funder managed to persuade to speak to her, and how open they were about some of the frankly amazing technology and tradecraft they employed. She is clearly a skilled journalist and a good listener, perhaps aided by her outsider status and fluent German.

There are some comic incidents, as one would expect, notably the Stasi man who steals a cheap trinket when he retires and is then persistently investigated even though no-one cares about the object itself. And then when Germany re-unifies he is investigated again by the authorities: once for the theft (which now concerns reunified Germany’s state property) and then again for lying about the theft. Kafka would have approved.

But the main story is one of persecution, where a single mistake – the details of which may never be apparent – can blight someone’s entire life. It can make them unemployable, with the additional twist that they can’t actually be unemployed because that is considered a Western phenomenon that the state has declared does not exist in East Germany. The Party invents and publicises a new dance that’s designed to eliminate all contact between dancers so as to avoid temptation. It’s hard to imagine the level of false consciousness living under such a system required of everyone – and even harder to understand that some still yearn for its barren certainties.

4/5. Finished Monday 22 June, 2026.

(Originally published on Goodreads.)