Why is Common Lisp not the most popular programming language?
Common Lisp’s enduring mystique contrasts with its limited adoption: many programmers praise its macro system, interactive REPL, condition handling, and long-term stability, yet find the syntax, heavy use of linked lists, and multi-namespace semantics hard to read and teach. Commenters argue that fragmented tooling and libraries, lack of a single dominant implementation or package ecosystem, and the absence of a major corporate sponsor have kept CL from becoming a default choice in industry, especially compared to C-derived languages, Python, or JavaScript. There is broad agreement that while Lisp remains a powerful, flexible “toolbox” for small expert teams and niche domains, its flexibility, DSL-heavy style, and historical baggage make it a poor fit for large, fungible engineering organizations and mainstream onboarding.
Historical and Network Effects
- Early Lisps needed expensive hardware; by the time machines caught up and CL was standardized, C and Unix had already won mindshare.
- The AI winter killed commercial Lisp vendors; today there’s no large, visible backer analogous to Sun/Oracle for Java or big users of Python.
- Popularity is seen as driven more by network effects and corporate sponsorship than by technical merit.
Ecosystem, Tooling, and Deployment
- Package management is described as fragmented and weak; multiple competing tools exist and there’s little convergence on “one obvious” library for things like serialization or async.
- Some argue the ecosystem is broader and more stable than outsiders think (Quicklisp, FFI helpers, many libraries), but it’s harder to discover and lacks Stack Overflow–style support.
- REPLs and image-based workflows are praised (conditions, restarts, remote debugging, incremental development), but free implementations’ CLI REPL experience is called rough without editor integration.
- Binary size and deployment are debated: SBCL can make standalone binaries but they’re relatively large; commercial implementations do better.
Language Design: Power vs Accessibility
- Advocates highlight macros, expression-based design, multiple dispatch (CLOS), the condition/restart system, incremental typing, FFI, and long-term stability of the standard.
- Critics see CL as a “kitchen sink” with historical baggage (separate function namespace, cons-centric lists, archaic pathname model).
- Some argue CL “made hard things easy but easy things hard”: everyday data structures (vectors, maps) and list ergonomics feel worse than in modern languages.
Lists, Parentheses, and Syntax
- Many commenters say the main barrier is syntax: heavy parentheses and linked-list–centric idioms feel alien and hard to read.
- Others counter that with structural editors, indentation, and familiarity, parentheses “disappear”; the real issue is that idiomatic list-processing style is foreign.
- There’s debate over linked lists themselves: some see them as obsolete compared to arrays and maps; others say they’re ideal for exploratory coding but must be replaced for performance.
Macros, DSLs, and Maintainability
- Macros and reader macros are seen as both CL’s killer feature and its curse.
- Enthusiasts value “code that writes code” and domain-specific abstractions; detractors argue each codebase becomes its own dialect, raising cognitive load and making large-team maintenance hard.
- Comparisons are drawn to Haskell extensions and C++ “subsets”: flexibility without strong conventions can produce write-only or highly idiosyncratic code.
Corporate, Community, and Culture
- Several argue CL fits small, expert teams better than large organizations that want fungible developers, strict conventions, and easy hiring.
- Some see the CL community as individualistic, slow to standardize or accept patches, and lacking cohesive conference/foundation structures.
- Others report enjoyable professional CL use and dispute claims that it’s unmaintainable or uniquely problematic for juniors.
Comparisons to Other Languages
- Clojure is cited as a “modern Lisp” leveraging the Java ecosystem and immutable data structures.
- Julia is noted as Lisp-influenced with macros and multiple dispatch, but still young and addressing issues like binary size and restarts.
- Rust, Go, Python, and JavaScript are frequently contrasted: they ride strong ecosystems, tooling, and corporate backing, even when they impose more constraints or complexity than CL.