Package extensions usage

David Holz david.holz at grindwork.com
Wed Dec 30 12:26:08 UTC 2015


This is something I've been coincidentally pondering recently.

I see two advantages of hierarchical package names:
1)  Uniqueness of internal package names
2)  The ability to reference internal packages easily as a relative 
specifier, without specifying the full absolute package name

Issue 1 is always solved by simple concatenation, and doesn't 
necessarily require new features of the package system.  Issue 2 is 
provided by local package nicknames, which I do support.  Using local 
nicknames for the purpose of internal packages would also promote this 
features' use probably more popularly than importing external libraries, 
at least at first.

A third "feature" of hierarchical package names is directory 
organization, but as others have mentioned, I don't necessarily consider 
that an advantage.

That said, I've not actually used these features in a real project, as 
portability is important to us.


The only place that I've seen nested packages be uniquely useful is in 
JavaScript's npm, where a single library can be loaded into the system 
in completely independent multiple instantiations.  I don't know if this 
will ever have any relevance to Lisp system configuration, though.

I've coalesced some musings about hierarchical packages as 
foo:bar:my-symbol (as opposed to com.org.foo:my-symbol) which would give 
some more real meaning to a traversable hierarchy besides just being a 
naming convention.

Regarding splitting a system up into multiple packages, I agree that it 
should it not be done lightly.  I use separate internal packages 
generally when code sections may be optional or independently loaded.  
Test suites and plug-in architectures are obvious examples.


On 12/29/2015 04:52 PM, Alessio Stalla wrote:
> Hi everyone,
>
> I'd like to run a little poll among experienced Lisp developers. The 
> topic is the usage in the wild of the extensions to the package system 
> provided by various implementations. My apologies to people who are 
> subscribed to the ABCL mailing list, where some time ago I submitted 
> the same questions getting back several insightful answers but no 
> actual data.
>
> So, here is how it is. I'm working on a novel idea (I hope) regarding 
> symbols and packages; I won't go into the details now. It suffices to 
> say that there is some overlap with features offered by certain Lisp 
> implementations, namely:
>
>  * package-local nicknames: the ability to specify, for each package, 
> a list of nicknames for other packages which are in effect only in 
> that package; available on ABCL and SBCL 
> (http://www.sbcl.org/manual/#Package_002dLocal-Nicknames) and possibly 
> other implementations I'm not aware of.
>  * "Hierarchical" packages: a naming convention for packages 
> understood by the reader and a few support functions, which allow to 
> have concise nicknames for a group of closely related packages, such 
> as com.foo.mylib.api and com.foo.mylib.implementation. Found natively 
> in Allegro CL 
> (http://franz.com/support/documentation/current/doc/packages.htm) and 
> in an open-source library by P. Bourguignon.
>
> My questions:
> 1) First and foremost, is anybody actually using those features? What 
> are you using them for?
> 2) If yes, how useful are they for you? What shortcomings do you find 
> in them?


-- 
David Holz
Director, Grindwork Corporation
http://www.grindwork.com/




More information about the pro mailing list