This is an idea for defining an PLaneT-like software repository for scheme48.
This UI mockup should give a rough impression how the system could look&feel:
> ,load-system prometheus * Available bundles containing prometheus: prometheus-0.1 (0.1), prometheus-0.2 (0.2), prometheus-0.3 (0.3); applicable: 0.2, 0.3; choosing 0.3 (prometheus-0.3) * Loading dependencies: spells-0.2 * spells-0.2 not yet installed, fetching from http://universe.s48.org/unstable/spells-0.2.tar.gz... installing... ok * spells-0.2 loaded * prometheus-0.3 loaded > ,open prometheus > (define foo (*the-root-object* 'clone)) > ...
I've seen an abstract about a system called October, but I haven't located much other information. Check this out:
The Architecture of a World-Wide Distributed Repository to Support Fine-Grained Sharing of Source Code
Jeffrey M. Siskind, Purdue University
http://www.nepls.org/Events/6/abstracts.html
Also you should be aware of Michel Schinz's packaging system, which is already in use for some Scheme48 packages:
Thanks very much for the remarks. The October abstract sounds indeed interesting; please keep me updated when you find out more about it.
I am aware of the scsh packaging proposal, and will incorporate ideas from it. I did not build upon it since scsh-install-lib is intended for scsh, with its load-path mechanism. Such a load-path mechanism doesn't exist in s48, hence I needed to build something to provide the necessary runtime support for s48 anyway; why not go the full way and include downloading and installation support directly at the REPL?
ATM, what I have in mind is heavily inspired by the Debian packaging system, except that multiple versions of a system would be parallel-installable --- I currently have an embryonic system working, dubbed scheme42, which allows one to drop a directory with a sys-def.scm file (= a bundle) into some path, and then load the systems contained in the bundle via ,LOAD-SYSTEM. For illustration: I have this in my ~/.scheme42.scm:
(world-append "/home/andy/.s48-world" (experimental "http://http://rotty-ipv4.yi.org/~rotty/s42/bundles/"))
This will make all bundles inside "/home/andy/.s48-world" known as installed. Hence, when I startup scheme42, I can ,LOAD-SYSTEMS already installed there.
The system database can printed with ,LIST-SYSTEMS:
The UNIVERSE system, if loaded, will add support for web downloading from the URL(s) specified in ~/.scheme42.scm. ,UPDATE-WORLDS will update the information about the bundles available at the various locations; you have to run it only once-in-a-while when bundles are removed or added to the bundle repository at the server. Also, when the UNIVERSE system is loaded, ,LOAD-SYSTEM will fetch and install packages from the web when needed.