<div dir="ltr">Hi Alexis,<div><br></div><div>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. </div><div><br></div><div>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.</div><div><br></div><div>Regards,</div><div><br></div><div>Jay</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 9, 2015 at 4:53 PM, Alexis King <span dir="ltr"><<a href="mailto:lexi.lambda@gmail.com" target="_blank">lexi.lambda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">About a month ago, Jay posted a <a href="http://blog.racket-lang.org/2014/12/the-racket-package-system-and-planet.html" target="_blank">blog post regarding the Racket package manager</a>. I found it interesting, so I posted a comment, but I also doubt <i>anybody</i> reads the blog comments, so I figured I’d also post it here.<div><br></div><div>I think Node.js's package manager gets versioning right. NPM uses <a href="http://semver.org/" target="_blank">semver</a> to manage dependency versions, and it works well. The <a href="https://github.com/npm/node-semver" target="_blank">node-semver</a> 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.<br><br>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 <i>own</i> 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.<br><br>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.</div></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Jay McCarthy<br><a href="http://jeapostrophe.github.io" target="_blank">http://jeapostrophe.github.io</a><br><br>           "Wherefore, be not weary in well-doing,<br>      for ye are laying the foundation of a great work.<br>And out of small things proceedeth that which is great."<br>                          - D&C 64:33</div>
</div>