Re: Scheme package management Lassi Kortela 25 Apr 2021 16:27 UTC

> A package is more than a library collection. It would include test code.
> It would include meta-information. It could even include executable
> scripts that are used to actually generate the libraries on the target
> system. In general, it doesn't make sense just to grab some subtree of
> the library collection.

The distinction is further complicated by the fact that a featureful
Scheme implementation like Gambit doubles as a package manager. So a
package manager can be:

1) built into the Scheme implementation
2) external program specific to particular Scheme implementation
3) a third-party package manager supporting more than one implementation

Fortunately our main concern is interfaces, not implementations. If we
deliver a spec that works for all of these cases, it doesn't matter.

Earlier I first claimed that "package = library collection" and then
that "package = authority about where and how to find libraries". These
are conflicting definitions in both theory and practice. Sorry!

It seems that all of these concepts are useful:

1) library [i.e. some Scheme code]
2) library with metadata
3) collection of libraries [possibly all have the same metadata]
4) authoritative info on where and how to get collection of libraries

But it's not clear to me how they should be divided technically.

> There could be a simple tool converting a single library into such a
> package.

True. It could also be implicit. Not clear on this yet.

> I didn't mean that rewriting shouldn't be used but that the default
> mapping isn't that useful IMO.

I'd leave it to implementations and their user communities to figure out
a good default mapping for each; I assume there's a lot of variety in
what works well.

E.g. Kawa should probably have defaults that make sense in a JVM context.

>     - The .scm vs .import.scm vs .sls vs .sld ... file extension wars.
>
>     - The %-encoding of filenames for R6RS libraries.
>
>     - The R6RS numbers-in-library-names thing.
>
>     - Case folding in filenames.
>
>     - Reading Scheme libraries from zip/tar files.
>
>     - Reading files from URLs vs local computer.
>
>     - Reading from git and directories.
>
>
> I would call this "compiling" and not "rewriting" because it may involve
> even more.

The rewrite language could be Turing-complete and imperative, but I
would strongly prefer a non-Turing-complete and declarative one.