The Tragedy of the Common Lisp: Why Large Languages Explode

Mark S. Miller on 2019-05-27

The Tragedy of the Common Lisp:

Why Large Languages Explode

Adapted from a 2015 es-discuss thread. “Common Lisp” is not the topic. It serves only as one of many illustrative counter-examples.

I have been on the JavaScript standards committee (TC39) since 2007. On TC39, we appreciate the value of language simplicity. But over time, we have lost our vigilance against encroaching complexity. We must better understand how that happens naturally, what the costs are if left unchecked, and what to do about it. This essay is addressed not just to TC39, but to all those who wish to influence the trajectory of the JavaScript standard or any standard facing similar pressures. Learn from our mistakes!

The Algol, Smalltalk, Pascal, and early Scheme languages were prized for being small and beautiful. The early C and JavaScript languages were justifiably criticized for many things, and rarely mistaken for beautiful. But they were small, and this aspect was properly and widely appreciated. When a language is small, our appreciation of it is often driven by the sense “I can learn the whole thing, and then I will have a mastery of it”, and later “I know the whole thing. I love the fact that there are no corners I don’t know.” For C and JavaScript, few who thought they knew the whole thing actually did — the details were actually fiendishly complex. Nevertheless, this sense drove much of the satisfaction with everyday usage.

The esthetic of smallness of JavaScript lasted through the EcmaScript-5 standard. I participated heavily in both EcmaScript-5 and EcmaScript-2015 and in both cases I am proud of my contributions. EcmaScript-2015 is much larger, but is nevertheless a better language. Given where we started, we could not have achieved these gains in the utility of JavaScript without such an increase in size. I do not regret most of the additions that grew EcmaScript-5 to EcmaScript-2015. For many of these, had we the EcmaScript-2015 standards process to do over again, I would likely make similar additions.

Each of the additions that grew EcmaScript-5 to EcmaScript-2015 had to pass a very high bar. Psychologically, this made sense to all of us because we were starting from a language, EcmaScript-5, whose smallness we could still appreciate. When a language is small, every additional feature is…