[racket] The Racket package management model

From: Alexis King (lexi.lambda at gmail.com)
Date: Fri Jan 9 16:53:06 EST 2015

About a month ago, Jay posted a blog post regarding the Racket package manager <http://blog.racket-lang.org/2014/12/the-racket-package-system-and-planet.html>. I found it interesting, so I posted a comment, but I also doubt anybody reads the blog comments, so I figured I’d also post it here.

I think Node.js's package manager gets versioning right. NPM uses semver <http://semver.org/> to manage dependency versions, and it works well. The node-semver <https://github.com/npm/node-semver> package demonstrates how this versioning works. A semver string is then included a module's dependencies list, which can specify all sorts of things, including "use the latest version of the library," "use the latest version given a particular major.minor string," and "use this precise major.minor.patch" version.

NPM handles the rest, downloading the correct version of the dependencies. The reason this is tricky is that this requires every module to have its own set of dependencies, since different modules can request different versions of packages. I'm not sure exactly how Node handles loading multiple versions of the same dependency with regards to performance and interaction, though it might be worth looking into.

In contrast, the Racket package manager provides very little versioning support, and packages have to be installed in an entire user or installation scope, rather than having module-specific dependency versioning. Is this bad? I don't know. But it's different, and I think NPM's model is worth considering.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150109/2762a5cf/attachment.html>

Posted on the users mailing list.