[racket] The Racket package management model

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Mon Jan 12 14:29:22 EST 2015

Hi Alexis,

The Racket package system simulates Node's if you assume that Node's use of
semver implies that packages with different versions are not backwards
compatible. Under this assumption, each Node package version would be a
separate Racket package and thus they could all be installed simultaneously
and specified on a per-package basis. One "advantage" would be that
packages that happen to share dependencies would have 1 install in Racket
but n installs in Node.

The post you cite is about how the Racket system is mostly about getting
files in the right place and how it is possible to use that infrastructure
to build more prescriptive package modules, such as the Node.js-like
simulation scheme above. I think it would be great for someone with passion
in this area to see about building such a wrapper. I imagine that the first
one would require some changes at the "raco pkg" level, but that those
changes would be improvement.

Regards,

Jay

On Fri, Jan 9, 2015 at 4:53 PM, Alexis King <lexi.lambda at gmail.com> wrote:

> 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.
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
>


-- 
Jay McCarthy
http://jeapostrophe.github.io

           "Wherefore, be not weary in well-doing,
      for ye are laying the foundation of a great work.
And out of small things proceedeth that which is great."
                          - D&C 64:33
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150112/1490669b/attachment.html>

Posted on the users mailing list.