Re: Scheme package management Lassi Kortela 25 Apr 2021 15:45 UTC
> I don't want this to become part of the RRS Scheme library system > syntax, nor do I think that this would be needed. (But maybe I > misunderstand you here.) > > It's the purpose of the package manager to install the libraries in such > a way that I can just do "(import (foo qux))". And if I distribute my > program as a package, I would add > "git://firstname.lastname@example.org:account/repo.git" as a dependency. > > Packages should be fine-grained enough that I don't have to select > certain libraries from a package. E.g., there may be a package called > r7rs-large, but this should be a meta-package consisting of packages > scheme-box, scheme-ilist, scheme-xxx, .... So a package is a library collection, and library collections can nest. It follows that it can makes sense to take any given collection at any level in the hierarchy and do something with it. And a library is a theoretically a singleton package. > If the library can list its own dependencies, it would make perfect > sense to find only one. The package manager can chase the dependencies > for the user. > > I'm not sure I understand what you mean here. For the purposes of this line of reasoning, think of the library as an implicit single-library package. I think the main dividing line between package and library is that libraries represent _code_, packages represent _authority_. A package says where you can get some code, and that implies how to traverse files, directories, and networks; how to log in using credentials, etc. A library doesn't imply any of that stuff; if you get equivalent code some other way (e.g. using a known hash to download it from IPFS) it's just as good. > Are you thinking of something like the rewrite rule above? > > I haven't fully thought about it because I don' think that it should be > used (much). Rewriting could solve all of these problems in one system: - 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.