guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Snowflake: Snow integration with Guile module system


From: Julian Graham
Subject: Snowflake: Snow integration with Guile module system
Date: Tue, 6 Nov 2007 23:35:38 -0500

Hi Schemers,

So, Snow is a wonderful idea (Guile people, go to
http://snow.iro.umontreal.ca/ right now if you haven't checked out
Snow yet), but there are some drawbacks to its approach to library
management.  Among them is the fact that it doesn't integrate with
your Scheme platform's native module system at all -- in fact, Snow
pretty much just concatenates the bodies of all of your library
implementations on load, which leads to problems with symbol name
collisions [1].  And that's kind of okay.

To get the benefit of Snow packages in, say, Guile, though, it's
necessary to make use of the encapsulation that Guile's module system
provides.  To that end, I've whipped up a small Guile module called
(snow snowflake) (because Scheme module systems are all unique, like
snowflakes!) that converts Snow packages to Guile modules and provides
a Snow-compatible mechanism for loading them.  To wit:

snow:package->module! package

...where 'package' is a string giving the name of a Snow package you
have already downloaded and installed via Snow (e.g.,
"fixnum/v1.0.3"), will copy the implementation files from
$SNOW_SITE_DIR to an appropriate subdirectory of %site-dir/snow (i.e.,
%site-dir/snow/packages/[package-name]/[package-version]) and rewrite
the package's metadata as a Guile module definition.

snow:use-modules module-list

...where 'module-list' is a list of symbols giving
(partially-specified) Snow package names -- e.g., (fixnum/v1) or
(srfi13/v1.0.0 srfi14/v1.0) -- will act as a replacement for Guile's
use-modules form, locating the right versions of packages that have
been installed in Guile's load path via snow:package->module!.  Here's
an example:

(load "snowflake.scm")
(use-modules (snow snowflake))

(snow:package->module! "fixnum/v1.0.3")
(snow:package->module! "srfi14/v1.0.1")
(snow:use-modules (srfi14/v1))

I've attached a copy of Snowflake; it works, but just barely -- you
need write access to Guile's site dir, and the code does no error
checking to speak of.  And I'm sure there are plenty of things it
doesn't get quite right, like exported syntax definitions.  Still, I
hope you guys can take a look and tell me what you think.


Regards,
Julian

[1]: 
https://webmail.iro.umontreal.ca/pipermail/snow-users-list/2007-October/000096.html

Attachment: snowflake.scm
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]