Common Lisp, ASDF, and Quicklisp: packaging explained

Old-school Lisp meets modern package chaos — fans split

TLDR: An explainer tries to untangle how Common Lisp uses ASDF (a build system) and Quicklisp (a package downloader). Commenters split: some praise Quicklisp, others slam missing version rules and call it “ancient,” with alternatives shaky; a few even jumped to Racket, while guide links try to help.

Common Lisp’s packaging explainer drops like a glossary for a language old enough to remember floppy disks. It breaks down the basics: ASDF (the build system), Quicklisp (the library downloader), and why the file stuff looks like ancient runes. But the comments stole the show. Newcomers admitted they bounced off the setup — one said they “drifted off to Racket” for saner docs and libraries. Veterans backed Quicklisp as the go-to, yet grumbled about the missing version rules: you can’t easily say “use version X or later,” and it drives people up the wall.

Then came the tool wars. One camp says Quicklisp is fine; another calls it kinda ancient and points to OCICL as shinier, while CLPM was roasted as “broken.” A helpful hero dropped starter guides for Vim and Emacs with Lisp in Vim and emacs4cl — cue the memes about “reading the manual like it’s 1995.” The vibe: nostalgic love for Lisp, modern frustration with packaging. People joked about dependency hell, comparing it to “choose your fighter” between tools and praying the FASL fast-load magic actually works. Drama level: high, documentation level: improving. Version checks remain the sore spot that everyone keeps poking. Expect more debates soon.

Key Points

  • Common Lisp distinguishes namestrings and pathnames for filesystem paths, with #P used to denote pathnames in code.
  • LOAD brings code into the running image and may load source or compiled files depending on the implementation.
  • COMPILE-FILE produces implementation-specific compiled artifacts (e.g., FASL) that load faster than source.
  • FASL files are implementation- and often version-dependent, improving load speed but limiting portability.
  • The standard’s PROVIDE/REQUIRE module mechanism is deprecated; packages serve as namespaces (e.g., CL-USER).

Hottest takes

"drifted off to Racket" — mtdewcmu
"any notion of dependency versioning" — regularfry
"kinda feels ancient" — tmtvl
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.