I suspect there is an opportunity to tighten up the use of these terms.
Starting out I'm looking at module-basics.scrbl where all of these terms
appear.
I suggest reading the whole of this post before commenting, as in places it
suggests concrete reads of things, and then goes back and asks about
alternative reads.
To start off with, the only concrete proposal in this post, does this look
useful/correct? :
A module is a programmer defined grouping of syntax objects which defines
bindings and
access to those bindings. A module may be defined implicitly by putting the
syntax
belonging to the module together in a file. The name of the file is then
taken as the
name of the module. Modules may also be defined explicitly using the
@racket[module]
form.
For example, suppose the file @filepath{cake.rkt} defines a module: ...
I gather there is no way to list modules? One might wish for something
like raco module show or some such. Using 'ls -R' on a directory gets the
files, which is close. Also, no way to list the modules and their
dependencies? Or perhaps all this is in DrRacket, and this geiser just
didn't see it ..
The module defines syntax groupings within the context of racket, which is
a little different than a file within a file system (which is place to put
bits). It would be good to understand the term 'collection' in a parallel
manner, though corresponding to a subdirectory tree rather than a file.
The section organizing modules sets the stage for this. So I gather that
within that discussion it would make sense to interject at some point that
such the organization of modules being described is called a *collection*.
Just as the file system may be used as a container for collections (via the
vehicle of subdirectory trees) -- is it the case that a package may also be
called a container for one or more collections? I suppose a package would
have some additional information? Now a collection is a container for
modules, so I wonder, is not a collection of collections really just a
bigger collection? Then the distinction between collection and package is
one of context. A collection is functionally defined form the point of
view of the language, indeed implied by the syntax - in particular that of
the path syntax in require; while a package is a utility used for
transferring and installing collections.
In the context of racket, what does 'library' mean? Dearsay it seems that
in some places modules are called libraries, and in other places
collections are called libraries, and in yet other places the term library
seems to indicate that something is installed in a standard place. We also
see the term 'installed' used. Particularly to distinguish between quoted
and unquoted paths in require statements. However, all software is
installed, rather this term seems to mean that there is a process for
binding modules to the unquoted path names in require - this process is
then called 'installing'.
So trying to put this together. In racket then, there is a unique special
place called "The Library". One may place collections in The Library, by
installing them via a packet manager command. Then "library modules" (i.e
modules found within a collection within The Library) may be accessed via
unquoted path names embedded in require syntax. We then nix the terms
'installed module' and instead use 'library module'. *Installing *is then
a process for copying collections from packages and putting them in The
Library. It would make sense to point at a package and say that it has
been installed -- this would mean that the contained collections are in
"The Library". Are there other processes for putting a module into The
Library?
Now by this nomenclature every racket installation would have a standard
library that comes with racket version x, and then installation specific
additions to that library added by the administrator later. So now we
have 'standard library' specific to a racket version, and 'local library'
specific to an installation. Is this accurate? However, in this doc
though the term library is used, we are never told about The Library, a
distribution specific 'standard' library, or a local library. Would this
be summarily rejected, or if done nicely, be useful?
The argument of *require *is a series of identifiers separated by slashes
with special meaning whether it is in quotes or not. The last identifier
indicates a module by name. The first identifier is the collection name.
The string as a whole is called the collection relative module pathname ??
is that correct? And the string except for the last identifier (except
for the module name) is called ?? It is analogous to a directory, but
directory is a file system terminology. We might call it a *module path*,
distinguished from a *module pathname*, Or is this too subtle. Perhaps
"relative module location with respect to the collection top" for the
prefix to the module name?
Can collections contain collections? My sense is no. However, if there
can be collections in collections then there is a top collection, and
sub-collections, etc. Then listing collections in The Library only gives
the top level collections. We also then have to wonder where in the
collection tree installation puts things when we install a package.
Though the term library is used, in the current nomenclature refers to
installed packages, but an installed package is a package we can point at
and say 'hey that was installed' rather than a directory we can point at
and say 'hey that is a library of collections'. These two things live in
different place. Indeed I'm likely to delete an installed package because
it takes up disk space and all I need is the library. Or is it the case,
that a package is not like a conventional zip file, but that the racket
uses it even after installation? The catalog apparently lists paths to
collections?
Now we have a catalog of collections, is this the same as a library? So we
don't have a special place where things go as part of an installation
process, but rather the installation process inserts an file pathname into
a catalog and this locates the collection. But what distinguishes a
collection from a package at that point. I could have a zipped
collection, that I unzip, then install.
There you go .. that is the walk I took through the docs trying to get my
head around these terms.
--
You received this message because you are subscribed to the Google Groups
"Racket Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-dev/faca4cd8-635a-418c-aa30-1a5c4edb9018%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.