Module systems for Lisp like language

Our application use a lisp like language as extension language. We'd like to add a module/package/namespace system (chose the name you want, if the choice of name implies difference in characteristics for you, the choice hasn't probably be made yet).

I'd like not to repeat known mistakes, so I'm looking for a critical review of the design space with trade-off to be made, tempting choices that have be proven bad choices, and so on. Obviously, I'm also taker for recommendations on related specific points for which you'd have an experience you want to share.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Common Lisp package system tutorial

I found that learning the Common Lisp package system was an uphill struggle. What an ugly mess!

Being a lambda-the-ultimate sort of person I put on my language designers hat and start thinking about how Crowe's Computer Language would have a much better package/namespace system. Oh! From this vantage point the Common Lisp package system has a compelling logic to it.

I decided to try to write a tutorial that teaches the CL package system and tries to make it easy to understand by bringing out the logic behind the design. Judging by the lack of enthusiasm for my drafts on comp.lang.lisp I was failing hard and became discouraged and never finished it.

Despite that I keep it on line and hope that its emphasis on the logic behind design makes it useful to you.

See The Complete Idiot’s

See The Complete Idiot’s Guide to Common Lisp Packages by Erann Gat. Also, note that CL packages create namespaces for symbols, not functions, classes, etc.

Readscheme module bibliography

While it is becoming a bit dated, my mini-bibliography on modules systems for functional programming languages might be useful to you:
http://readscheme.org/modules/

A good survey is the paper by Christian Queinnec: "23 things I know about modules for Scheme".

At first look it is

At first look it is precisely the kind of thing I was looking for. Thanks.

Some pointers

Ah, and when you're in an adventurous mood, you might also want to consider skipping the whole issue, and simply using first-class environments. Just kidding. :-P

(Edit: first-class environments are enlightening when thinking about modules, even when the resulting module system doesn't have them.)