[racket-dev] PLaneT(2): Single vs multi-collection packages

From: Greg Hendershott (greghendershott at gmail.com)
Date: Fri Jun 7 18:30:07 EDT 2013

Thank you for the thorough explanation.

Also, I'm having the "duh" moment I predicted.

A collection may have modules in subdirs and still be just one collection.

The use case for a multi-collection package is when you have
collections A and B that you want to be packaged and installed
together -- as "top-level" A and B collections. (Although you make A
and B into subdirs of a package dir when preparing a multi-collection
package -- even though you "push them down" for that prep -- when
installed they'll be "hoisted back up" side by side with other
collections.)


On Fri, Jun 7, 2013 at 5:04 PM, Jay McCarthy <jay.mccarthy at gmail.com> wrote:
> On Fri, Jun 7, 2013 at 2:49 PM, Greg Hendershott
> <greghendershott at gmail.com> wrote:
>>> I am *very* strongly in favor of this -- I'd rather have
>>> single-collection packages than multi-collection packages, if forced
>>> to choose. I'm very glad that you and Laurent have done the work here.
>>>
>>> I'd be happy to update all of my packages.  Currently, of my 9
>>> packages on pkg.racket-lang.org, 8 are single collection, and 1
>>> splices into the existing `data` collection (and has a second
>>> collection to work around a now-fixed limitation.
>>
>> Likewise I'd be happy to update all of mine.
>>
>>
>> As I thought about this, I realized I have what feels like a _really_
>> dumb question. I realize maybe I don't have a crisp handle on
>> "collection", "library", "module", and "subdirectory".
>
> (require a/b/c x/y/z)
>
> A collection is something that comes first in a require: a and x.
> A library normally means module, but might be a general term for "code I share".
> A module path is the full path: a/b/c and x/y/z.
> A module is a file: "a/b/c.rkt" and "x/y/z.rkt"
> A module has a 'short name': 'c and 'z (but you normally don't think about it.)
> A subdirectory is where a file might be and shows up in the module path.
> A package is a set of modules.
>
> Some documentation might refer to subdirectories as "sub collections".
>
> This whole debate has been about whether a SINGLE package can have
> MANY modules from DIFFERENT collections.
>
> Can package "P" have module a/b/c AND x/y/z?
> Does package "P" have to have a collection "P"?
>
> The current package system puts no restriction on what modules a
> package can have in it.
>
> The proposed patch supported vigorously by Sam is to restrict some
> packages so that the can only have modules from one collection. Since
> this restriction is only on some packages, it doesn't take power from
> the system. And some people believe that this restriction is more
> convenient, because they do not have to come up with a name for P or a
> directory for it. There is a second debate on the point of whether the
> collection name of a restricted package P must be P.
>
> Jay
>
>> A single collection can have multiple modules, correct?  At what point
>> does it become "multiple collections" -- simply because some of the
>> modules are in subdirs?
>>
>> In other words:
>>
>>   my-collection/
>>     subidr1/
>>     subdir2/
>>
>> Is that 1 collection or 3?  And why?
>>
>> Is the answer related to whether there's an info.rkt in a subdir?
>>
>> The discussion at http://docs.racket-lang.org/guide/module-basics.html
>> doesn't clear this up for me (unless I'm overlooking something on
>> multiple re-reads). 6.1.1. has an example of modules organized in
>> subdirs. This feels like "one collection" but the term hasn't been
>> introduced yet.  6.1.2 starts talking about library collections, and
>> says "A collection is a set of installed library modules". But it
>> doesn't say "modules only in the same directory", and it doesn't
>> really explain at what point it would be considered separate sets of
>> modules, i.e. two collections instead of one.
>>
>> Again, I feel like I'm being dense and will probably be embarrassed
>> when I hear the answer, but ... there. I asked.
>> _________________________
>>   Racket Developers list:
>>   http://lists.racket-lang.org/dev
>
>
>
> --
> Jay McCarthy <jay at cs.byu.edu>
> Assistant Professor / Brigham Young University
> http://faculty.cs.byu.edu/~jay
>
> "The glory of God is Intelligence" - D&C 93

Posted on the dev mailing list.