Re: R6RS and portability Jakub T. Jankiewicz 25 Apr 2021 15:55 UTC


On Sun, 25 Apr 2021 17:14:28 +0200
Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote:

> Am So., 25. Apr. 2021 um 17:05 Uhr schrieb Marc Feeley <
> xxxxxx@iro.umontreal.ca>:
>
> >
> > > On Apr 25, 2021, at 10:55 AM, Marc Nieper-Wißkirchen <
> > xxxxxx@nieper-wisskirchen.de> wrote:
> > >
> > >
> > > Also the syntax for the library names would need to be reserved.  I
> > > have
> > advocated a syntax that uses the URL as part of the name, e.g. (
> > github.com/feeley/digest) or (github.com/feeley digest), so that the
> > package manager can operate without a central registry of libraries, which
> > is important to give library authors the freedom to create and update
> > libraries as they see fit.  A nice practical advantage of a URL name like
> > github.com/feeley/digest is that many tools (code editors, slack, web
> > browsers, email readers, etc) will detect these names and offer a
> > hyperlink that will allow the repository to be browsed in a single click.
> >
> > >
> > > I would make a difference between package names and library names. In
> > general, we are not interested in finding single libraries but packages
> > (that include meta-information and know about dependencies). It is the
> > packages that need to be found automatically. So it makes sense to "name"
> > packages through a URI, but libraries can still be named, as usual, e.g.
> > `(srfi 999)` or `(scheme box)` or `(nieper bubblesort)`.
> > >
> > > The package for my bubblesort would be "named" <
> > gitlab.com/nieper/bubblesort>. It would contain a manifest like
> > >
> > > (package
> > >   (author "Marc Nieper-Wißkirchen")
> > >   (license GPL-v3)
> > >   ..
> > >   (defines (nieper bubblesort))
> > >   (cond-expand
> > >     ((gambit)
> > >      (requires "gitlab.com/r7rs/box"))
> > >     ...))
> > >   ...)
> > >
> > > As a package author, I know that the "gitlab.com/r7rs/box" package
> > provides `(scheme box)`.
> >
> > In my view, repositories are equated with packages and the repository’s
> > subdirectories (possibly including the root) are the libraries.
> >
> > So if the URL is github.com/account/repo then these are possible
> > libraries:
> >
> >    (github.com/account/repo)           ;; if the package is itself a
> > library (useful for small libraries)
> >    (github.com/account/repo foo)       ;; the foo library in the package
> >    (github.com/account/repo bar)       ;; the bar library in the package
> >    (github.com/account/repo foo qux)   ;; the foo/qux library in the
> > package
> >
>
> I don't think that the package and library namespace should be mixed. Nor
> are library names like "(github.com/account/repo foo qux)" very nice, quite
> the contrary. And there should be no need to find a single library.
>
> Adding one more indirection makes sense here. Of course, there could be a
> default mapping that will produce your suggested mapping.

What about is the meta data specify file -> library.

(package
   (author "Marc Nieper-Wißkirchen")
   (license GPL-v3)
   ..
   (defines (sort bubblesort quicksort)
            (copy deep shallow))
   (libraries ((sort . ((bubblesort . "/lib/sort/bubblesort.scm")
                        (quicksort . "/lib/sort/quicksort.scm")))
               (copy . ((deep . "/lib/copy/deep.scm")
                        (shallow . "/lib/copy/shalow.scm")))))
   (cond-expand
     ((gambit)
      (requires "gitlab.com/r7rs/box"))
     ...))
   ...)

The mapping can look completely different, but it can just map the library
definition into package files.

--
Jakub T. Jankiewicz, Web Developer
https://jcubic.pl/me