By Colin on 2025-08-30
"But I need types," he told me.
Humans have a tendency toward binary thinking (pardon the pun). If it's not A, it's B. Perhaps because Lisps have REPLs, they are often thought of from the outside as being dynamic, interpreted languages. Our years of Python have taught us that such languages don't really have strong typing - it's all a wild guess until the interpreter calls foo on a and b and we find out who everyone really is.
Yet Common Lisp is fully typed, and AOT compiled. You can assign strict types to variables and entire functions, and the compilers will use this both for optimization and general correctness checking, and you can freely inspect the assembly code of any compiled function. All of this while maintaining the fluidity of development flows usually reserved for dynamic languages.
But we're not here today for the revelation that Common Lisp has types.
This article elaborates Common Lisp's conception of "types" and their triple-natured reality, answering the questions:
What is a type?
What is a class?
What is the machine really doing?
Types are of the Sky
... continue reading