[plt-scheme] How best to use PLaneT?
Hi everyone,
I generally find coding against PLaneT to be a frustrating experience.
This is probably due to the way I use it. For this reason, it becomes
a question of practice.
Question: Should I always code against a specific library version?
I find that if I code against (say) "instaservlet", I have to hope
that the library maintainers do major revisions when things change
substantially. I choose this example because, in late August, I wrote
a script using this library. Since then, PLT Scheme went from 4.0.3 to
4.1.x. Instaservlet went from (1 3) to (1 7). Not long ago, while my
server was live and running, it started throwing errors: instaservlet
was failing in a live, running app. So, I blew away my cache and
updated; this now is producing a stream of errors regarding scribble
and other parts of the system. Obviously, I cannot use the most recent
PLaneT packages on 4.0.3, because many of them have been updated for
4.1.
In short, 4.0.3 is too old to interact with PLaneT at this point. At
least, that seems to be the case with respect to some libraries.
My solution seems to be to write my code using very explicit versions
on PLaneT repository objects.
(require (planet "instaservlet.ss" ("untyped" "instaservlet.plt" 1 (= 3))))
was the require statement I should have used. This prevents the
library from moving underneath me, and means that if the library
maintainer does not increment their library version with the language
version (eg. version (1 6) should perhaps have become (2 0) to reflect
the change from compatibility with PLT 4.0 to 4.1).
So, that's the long story, and I believe the lesson I learned (or
should have known) was "code against specific library versions."
Should I have taken anything else away?
Cheers,
Matt