February 9th, 2008

Kent Pitman on CL innovation

Kent Pitman responds to the assertion Common Lisp wasn't innovative with some interesting historical perspective. Among other things:

In CLTL1, just the core notion that you could make a single dialect that ported across many different hardware types, and where the implementation did the same thing compiled as well as interpreted, was enormously innovative. And CLTL borrowed ideas from Scheme in terms of lexical scoping that had not previously been used in the MACLISP family and were highly controversial in that world. The CL package system built on the ideas of other package systems (MACLISP didn't have packages, btw, it had obarrays; the LispM had packages, but they were structured quite differently). Common Lisp notion of exported symbols which hadn't been tried before. The array type system and the whole notion of upgraded array element types were innovations. I'm sure if I thought for a while I could come up with more. There was a LOT of stuff that was brand new in CL, and not easily accessible in other dialects.

Again with ANSI, the amount of innovative design it did was pushing the limit of what was reasonable for a standards group. There were four major areas of redesign of the language embodied in that standard: CLOS was quite innovative, for example. It was similar to New Flavors, but it merged ideas from Common Loops. The condition system was new. It borrowed from the LispM's New Error System, but it changed that design in some substantive ways. The LOOP iteration facility was a new version of an old design, seeking to repair most of the things people had hated about LOOP. The pretty printer used new ideas and techniques not present in previous implementations. And there was a fifth major area that was backed out of, the fleshing out of the environment access stuff, because the degree of recent innovation meant it wasn't yet stable. [This facility is reflected, in partial form, in CLTL2.]