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:
- 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?