Why I Program in Lisp

Lambda expressions and “properly working” functions

  • Commenters dispute the claim that only Lisp had “properly working lambda expressions until recently,” noting Haskell/ML had them for decades.
  • Some suggest “properly” refers less to bare lambdas and more to a coherent design of scope, extent, and compile-time vs run-time (e.g., EVAL-WHEN), but they clarify this is not an attack on Haskell/ML.

Wording and clarity

  • Several comments dissect the ambiguous phrase “only available in Lisp until recently” and propose clearer variants (“were available only in Lisp until recently” / “Until recently, …”).
  • Discussion highlights the importance of precise English in technical writing.

Why Lisp feels compelling & how people learn it

  • Readers report the article making them want to learn Lisp; suggestions include Common Lisp (LispWorks, PAIP, On Lisp), Clojure, and classic talks and videos.
  • Common motivations: expressiveness, powerful macros, refactoring ease, interactive REPL, “joyful” feeling, and CLOS/MOP.

Language power vs equivalence

  • Debate over the aside that “other general-purpose languages can do everything Lisp can (if Church/Turing are correct).”
  • Some argue Turing completeness doesn’t capture ergonomics; implementing Lisp in another language is not the same as that language being as usable for Lisp-like abstractions.
  • Turing tarpit examples (Brainfuck) are cited to separate theoretical power from practical suitability.

Functional programming, purity, and I/O

  • Long subthread on whether “purely functional” is practical given most real programs are I/O-heavy.
  • Consensus: pure FP doesn’t eliminate side effects but isolates them (functional core, imperative shell; IO monads, effect systems).
  • Several examples show separating “world” (I/O, state) from “model” (pure transformations) and how this aids testing, reasoning, and error handling.
  • Haskell’s IO, logging patterns (Writer monads, laziness), and challenges with randomness and effects are discussed, alongside more pragmatic FP in languages like Clojure, F#, and Erlang.

Closures, first-class functions, and state

  • Clarifications that C function pointers aren’t first-class functions (no lexical capture).
  • Many describe closures as transformative for design, emphasizing that GC and lexical scope make them practical and safe.
  • Historical notes: early languages (Algol) already had nested procedures and partial closure-like behavior.

Lisp vs other dynamic languages (Ruby, Python, JS)

  • Some see the article’s arguments as also favoring Ruby (dynamic, expressive, ad-hoc polymorphism), but Lisp is cited as having stronger compilation, macros, and optimization hooks (the).
  • Others argue JS/Python have adopted many “Lisp” features, but that Common Lisp still offers more raw metaprogramming power.

Syntax, parentheses, and reading order

  • Persistent thread on parentheses anxiety and “inside-out” reading; proponents say this fades quickly with experience and structural editors.
  • Comparisons to infix, method-chaining, and arrow macros (->) suggest much of the perceived right-to-left-ness exists in other languages too.
  • Some suggest that Lisp’s AST-like surface syntax is both its strength (easy macros, homoiconicity) and a conceptual shift.

Tooling, environments, and ecosystem

  • Several note modern Lisp environments lag behind classic Lisp machines and mainstream IDEs.
  • Others counter that Common Lisp tooling (SLIME/Sly, various editor integrations) plus interactive debugging and image-based development rival or exceed Python-like workflows, though advanced refactoring is weaker.
  • Binary size, tree-shaking (LispWorks vs SBCL/ECL), and library gaps are acknowledged tradeoffs.

Adoption, production use, and culture

  • Question raised why Lisp remains rare in production: answers cite ecosystem, hiring pool, and lack of strong, modern, integrated environments.
  • Some point to successful but niche Lisp systems (CL-based apps, embedded Lisps, scripting in CAD tools).
  • There is light meta-commentary: Lisp (and Haskell) are sometimes used partially for intellectual pleasure and blog-worthiness; nonetheless many participants emphasize genuine productivity and maintainability benefits.