> The author spends time disassembling CL code into assembly, replicating C's pointer arithmetic in lisp, jumping hurdles with macros, implementing a forth in CL, and in general, performing many other common lisp stunts which "blub" languages inefficiently handle.
Let Over Lambda is a great counter-example to the "Lisp is a very high-level language" myth, and IMO should be viewed and read as the successor to pg's On Lisp. The techniques and style of the code in LoL are a great example of what modern Common Lisp code looks like. It's a huge change from the Common Lisp code you read from the 1980s and 90s, and really different from code you see in any other language other than Racket and Scheme. The reader-macro/macro/closure DSL style of programming has just started to emerge over the last 15 years and I am excited about what other techniques come out of this style of coding.
Lisp is as high-level as a fundamentally procedural language can go; it even kind of looks functional, and it's closer to being functional than procedural language styles which scatter globals everywhere and don't use abstraction very well (IOW, the kind of code assembly language programmers and/or EEs tend to write).
However, compared to Haskell or even OCaml, it sits firmly in the procedural world.
Let Over Lambda is a great counter-example to the "Lisp is a very high-level language" myth, and IMO should be viewed and read as the successor to pg's On Lisp. The techniques and style of the code in LoL are a great example of what modern Common Lisp code looks like. It's a huge change from the Common Lisp code you read from the 1980s and 90s, and really different from code you see in any other language other than Racket and Scheme. The reader-macro/macro/closure DSL style of programming has just started to emerge over the last 15 years and I am excited about what other techniques come out of this style of coding.