A road to Lisp: Why Lisp
Lisp’s appeal is framed around powerful metaprogramming (macros), homoiconicity, and interactive REPL-based development, with many commenters sharing “aha” moments about treating code as data and using macros to reshape programs at compile time. Others argue these strengths are no longer unique, pointing to comparable tools in languages like Ruby or Smalltalk, and highlight Lisp’s trade-offs: a smaller ecosystem, an aging Common Lisp standard with weak concurrency support, and the risk of sinking years into a niche language. The thread also explores which Lisp dialects are worth learning today, how they compare to environments like GToolkit/Pharo, and whether their live, dynamic nature makes them a good fit for AI-assisted and iterative development.
Site & presentation issues
- Several readers report code blocks rendering as black-on-black (especially on some Mac/iPad browsers), likely from not setting foreground color when changing background.
- Others say it looks fine on Linux and some Mac setups, suggesting theme / dark‑mode interactions.
Macros, code-as-data, and “aha” moments
- Many try to clarify macros: code that runs at compile time, takes unevaluated syntax/AST, and produces new code.
- Distinctions drawn vs. higher‑order functions and FEXPRs: macros receive symbols / forms, can avoid eager evaluation (e.g., custom
if/ short‑circuitingand), and can transform arbitrary data into code. - Lisp macros are framed as easier than Rust/C macros due to homoiconicity (same structure for code and data), enabling DSLs and optimizations (e.g., turning
caseinto efficient switch tables). - A minority argues macros are not essential and can be misused; others counter they’re central for metaprogramming and precomputation even in interpreted settings.
REPLs, hot reload, and live programming
- Debate over whether REPLs and hot reload are really “Lisp-unique”; some note Ruby, Smalltalk, Erlang, Dart/Flutter, etc. have similar live features.
- One side stresses that in Lisp, REPL + homoiconicity + tooling create a qualitatively different interactive workflow; others say that’s more about tooling and late binding than about homoiconicity itself.
- Clarifications that many Lisps can produce binaries and don’t require shipping a live REPL, though REPLs are core to development.
Power vs. safety and Lisp’s “role”
- Extended metaphor of “Light Side” (constraints, safety, static types) vs “Dark Side” (expressiveness, macros, operator overloading).
- Some see Lisp as a “Dark Side” language that still appeals to “Light Side” programmers because of its conceptual simplicity.
- Others push back that power vs safety is not a simple binary; languages like Haskell aim for both.
Lisp, LLMs, and interactive agents
- Mixed experiences: LLMs once struggled with parentheses but are improving; context limits can still cause failures.
- Several describe strong workflows where an LLM drives a real Lisp REPL (sometimes across services and UIs), exploring state, DOMs, and systems interactively rather than guessing static code.
Alternatives and related ecosystems
- Smalltalk (especially GToolkit/Pharo) is highlighted as offering a comparable or better live, image-based environment, with fast evolution, strong IDE, and moldable development tools.
- Differences noted: CL’s file-based workflow and macros vs. Smalltalk’s extensible compiler and message‑sending OO; many see them as roughly equivalent in expressiveness with different trade‑offs.
Critiques, limitations, and practical questions
- Several call for balanced critiques; links shared to critical essays and migration stories (e.g., to Julia).
- Common Lisp’s stagnant standard (since 1995) and lack of standardized concurrency / async are cited as major drawbacks; community libraries provide de facto threading/concurrency but not a unified model.
- Other criticisms: small ecosystem, risk of spending years on intellectually fun Lisp work with limited practical payoff, and social/maintainability concerns in industry teams unfamiliar with Lisp.
- Discussion of which Lisp to learn: Clojure is seen as most “professional-market” relevant; CL and Scheme/Racket (e.g., for SICP) recommended for hobbyists.
- Practical topics include compiling to executables (e.g., SBCL’s
save-lisp-and-die) and using FFI / callbacks via libraries that generate C‑callable trampolines from Lisp functions.