December 10, 2025
Package Panic: Lisp Edition
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).