Why does Lisp use cons cells? (1998)

A classic rant defending Lisp’s use of cons cells and the archaic `car`/`cdr` names prompts both technical and cultural reactions. Commenters debate the merits and performance tradeoffs of linked lists versus vectors, how cons pairs underpin powerful persistent data structures, and whether opaque historical terminology is an unnecessary hurdle for newcomers. Others reflect on how the flame-heavy style of early Usenet Lisp forums—shaped by a few highly abrasive personalities—both produced excellent technical writing and also drove people away, influencing how modern communities like Hacker News are moderated.

Tone, style, and online culture

  • Many describe the original post as technically excellent but dripping with hostility; some find this entertaining or refreshing, others find it exhausting and counterproductive.
  • There’s a broader debate about blunt rudeness vs. passive-aggressive hostility vs. simple civility.
  • Several recall traumatic experiences on Usenet as newcomers, contrasting that with today’s more moderated environments and specifically praising HN’s moderation approach.
  • Others argue that it’s possible—and desirable—to mentally strip tone and focus only on content, but not everyone finds that realistic.

Impact on Lisp community and Usenet

  • One view: a particularly abrasive Usenet personality effectively poisoned the main Lisp newsgroup, driving away newcomers and scaring off prominent practitioners, which hurt Lisp’s evolution and visibility.
  • Counter‑view: the newsgroup was only a small, self‑selected slice of the actual Lisp community; most serious work happened in mailing lists, universities, companies, and never touched Usenet. Lisp’s decline is attributed more to broader industry trends than to newsgroup flamewars.
  • There’s agreement that trolls and flame dynamics made comp.lang.lisp unpleasant and that handling this kind of behavior remains a hard problem for online communities.

Why cons cells & their properties

  • Cons cells (pairs) are praised as extremely simple, expressive primitives: from address pairs plus symbols, one can build lists, trees, records/structs, arrays, and even arbitrary graphs.
  • They’re seen as “low-level” in a mathematical sense: a tiny set of abstractions that make code and data easy to represent and transform.
  • Persistent data structures and structural sharing (e.g., cheap prepend, copying with shared tails) are highlighted as key advantages.

Performance and data-structure tradeoffs

  • A long subthread debates performance:
    • Critics note that pointer‑chasing in linked lists hurts locality; vectors often win for traversal and random access, especially on modern cached architectures.
    • Defenders reply that many managed runtimes (not just Lisps) already rely heavily on heaps of pointer‑connected objects; locality is mitigated by allocation strategies and garbage collectors that compact or cluster objects.
    • Benchmarks in the discussion show lists can be only slightly slower than vectors for some operations; lists also shine for patterns like repeated prepending or simple stacks.
  • Both sides agree there are tradeoffs and that vectors are often, but not always, the better default; they disagree on how severe and how Lisp‑specific the list penalties are.

Naming (car/cdr) and accessibility

  • Some argue that archaic names like car/cdr are a needless barrier for beginners and defended mostly through nostalgia or hardware history that no longer matters.
  • Others respond that:
    • More descriptive aliases (first/rest) already exist and can be used.
    • Once learned, the names are just standard jargon, a very minor blemish compared to the language’s benefits.
  • There’s criticism of attempts to portray these names as deep virtues rather than mild warts.

Learning cons and list intuitions

  • Several comments walk through how cons actually constructs lists, including why expressions like (cons (list 1 2) (list 3 4)) logically yield a three‑element list.
  • One theme: understanding lists as chains of cons cells (rather than magical “list” objects) makes results like this intuitive.
  • There’s mention of alternative primitives (list*, different arities for cons) and how they might align better with beginner intuition.