Nikodemus Siivola <[EMAIL PROTECTED]> writes:
> Pascal Bourguignon <[EMAIL PROTECTED]> writes:
>
>> We'd still have to resolve the version problem first.
>
> Easy. (Feel free to utilize, mangle, and ignore -- as suits
> the project.)...

An explicit versioning mechanism for Lisp packages is neither
sufficient nor necessary.

Suppose you've got two versions of a package whose un-versioned name
is FOO in your Lisp image; one version of FOO exports a symbol with
name BAR, the other exports a symbol QUUX, and neither BAR nor QUUX is
exported by both.  AFAICT, there will always be files that won't be
readable depending on which package the reader knows as FOO at
read-time: a file containing the syntax "foo:bar" won't be readable
one way, a file containing the syntax "foo:quux" won't be readable the
other way.  All the above also applies to the loader and load-time,
too, except that the loader isn't as programmable as the reader.

There are ways to work around this: (0) patch all sources before the
reader gets at them, and never distribute fasls, (1) make a
version-aware reader, (2) ensure that the required versions of
packages be the default during processing of files.

I think option (2) is a lot simpler than either (0) or (1).  For asdf,
it amounts to fairly small extension that munges the package-version
space around compile-op and load-op [*], and then some bookkeeping in
.asd files of systems distributed, to declare relationships between
systems and packages.

But if you do need to rejigger the package-version space around
compile and load operations, why not just temporarily rearrange the
package namespace itself, instead?  This way, you don't need to do as
much patching in order to integrate systems into distributions, and CL
can be saved one more weird wrinkle.

Using package names as implicit designators of versioning also has the
advantage that people can start doing it now, without any in-advance
agreements about how package versioning is supposed to work.

--
RmK

[*] Ideally, the frobbing would be an :around method on asdf systems,
but asdf doesn't support :around or :before methods on systems in any
useful way.

_______________________________________________
Gardeners mailing list
[email protected]
http://www.lispniks.com/mailman/listinfo/gardeners

Reply via email to