Remix.run Logo
mtdewcmu 3 days ago

I started learning Common Lisp, but ASDF and Quicklisp threw me off. I couldn't tell if you were supposed to choose one or the other or they were used together. This might revive my interest in Common Lisp if I get around to reading it. But in the meantime I drifted off to Racket, which is relatively well documented and has extensive libraries and really unique features.

stackghost 3 days ago | parent | next [-]

The packaging story in common lisp is.... Not great.

It's hamstrung by archaic naming conventions that confuse newcomers. What CL calls a system is roughly analogous to what most other languages call a package. What CL calls a package is what other languages call a namespace.

Despite all that it's a pretty good language if you can find libraries for what you need. The de facto standard implementation (sbcl) has a very good compiler and an acceptable GC. The language itself is expressive and it makes for very quick and pleasant DX. I love writing common lisp.

tmtvl 2 days ago | parent | next [-]

> * What CL calls a system is roughly analogous to what most other languages call a package.*

Or a crate, or an artifact, or a module, or a gem, and there's probably other variations I can't remember off-hand.

> * What CL calls a package is what other languages call a namespace.*

Or a module, or a package, or... actually, I don't know what Perl or Ruby call it. I believe C calls it a header, but that's not quite the same thing as a package.

Turns out naming things is difficult (as well as cache invalidation, off-by-one errors concurrency, and).

mtdewcmu 2 days ago | parent [-]

Racket has packages (1) that work quite well. Chicken Scheme has Eggs.

(1) https://docs.racket-lang.org/pkg/index.html

tmtvl 2 days ago | parent [-]

Eggs? Goodness. And I believe Chicken is R5RS as well, so I don't know what they call libraries/modules/packages/whatever (in R6RS and R7RS they're called libraries, but R5RS didn't specify anything). I expect Racket to call them libraries considering the Racket/R6RS connections.

skydhash 2 days ago | parent | prev [-]

Is it archaic? A lisp program is a dynamic image. A collection of symbol is very aptly named a package. And third party module can be named as a system (collection of packages).

brabel 2 days ago | parent [-]

Agreed, and I think package as used by Common Lisp and Java is more common than “namespace” which the parent commenter believes is the modern word for that!

bilegeek 3 days ago | parent | prev [-]

For anybody who's still confused, the tl;dr is ASDF is the actual package loading mechanism, Quicklisp doubles as an ASDF wrapper and a package manager.