Paul Graham on “what made Lisp different” in his essay Revenge Of The Nerds in 2002:
The whole language is there all the time. There is no real distinction between read-time, compile-time, and runtime. You can compile or run code while reading, read or run code while compiling, and read or compile code at runtime.
Running code at read-time lets users reprogram Lisp’s syntax; running code at compile-time is the basis of macros; compiling at runtime is the basis of Lisp’s use as an extension language in programs like Emacs; and reading at runtime enables programs to communicate using s-expressions, an idea recently reinvented as XML.
As a novice user of Clojure and Emacs, right after reading this statement, bits and pieces of knowledge I had about Lisp immediately “clicked”.
Wish I had read about it since day one.