On Wed, Apr 6, 2011 at 2:10 PM, Mark Engelberg <mark.engelb...@gmail.com> wrote: > The following two lines trigger an error: > > (require (planet dherman/memoize:3:1)) > (require (planet soegaard/math:1:4/math)) > > The error says something along the lines that the soegaard package > requires an older version of the memoize library, and the two can't > coexist. > > Shouldn't modules protect me from this? Shouldn't it be possible for > the math library to use its own required version of the memoize > library, without it screwing up my ability to require the latest > version of the memoize library?
In the fully general case, this is not possible: you need to instantiate two copies of the same library and if that library has some external state (say a database connection) or even internal state that somehow goes from one version of the library to the other version via the other packages (imagine that there was a generative define-struct in there somewhere and values somehow make their way from one version's maker to another version's selector), then strange things start happening and the library breaks, through no real fault of its own. In the world of Racket modules, you never have two instantiations of a particular module at once -- they always share the same state (unless you monkey around at lower level using the introspection facilities) so when planet is asked to load two different versions into a single program, it decides to be conservative and signal an error, rather than violate this. That said, there are two things to note: - Planet has a kind of escape hatch where a library can declare that it is fine with being instantiated multiple times. See section 6.2.3 of the planet docs. - Planet was probably too conservative on this front and probably in Planet 2.0 the story will be different (and better). Robby _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users