[racket-dev] new package system and versions

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Nov 30 12:18:40 EST 2014

Although I object to some of your characterizations of the difference
between PLaneT and the new package system, it's fair to say that PLaneT
provides better support to package authors for creating new APIs that
are intended to replace (but coexist with) old APIs.

I think the answer to that problem in the new system is better tools
for package authors, along with better catalog-display mechanisms for
package users. That is, I think "javascript" through "javascript9" are
fine as package names (and even collection names), but I think those
packages should be grouped together as a listing in the catalog.
Meanwhile, we need tools to help the author of "javascript3" introduce
"javascript4", and so on.

Creating an external tool might not be necessary if the notion of
major-version-compatibility were built into the package system in a
different way. Unfortunately, it's not easy to add more version support
into the current design and implementation. It's the same as designing
a more traditional programming language: choices interact with all
sorts of trade-offs, both conceptually and in the implementation.

So, if the question is "will the core package system's treatment of
versions change?", then I think the answer is "no". If the question is
"will the package versioning experience improve for package authors and
users?", then I hope the answer is "yes" --- but I intend to leave the
actual answer to others (yes, you!), for now. Until we find otherwise,
I can't help feeling that the current design and implementation has all
the primitives that we need[*] for building better things on top.

 [*] Of course, it has way too many primitives. Again, like any design,
     it's a process to figure out what the true core could be.

At Sun, 30 Nov 2014 10:43:19 -0500, Neil Van Dyke wrote:
> Any chance of revisiting the new package system's stances on versions -- 
> specifically, on the two issues:
> 1. Can subsequent versions of a named package (which has an identity)  
> be non-backward-compatible?
> 2. Can a Racket setup (and even an individual program) have multiple 
> versions of a package at the same time?
> Regarding #1, the requirement to never make a non-backward-compatible 
> version of a package without giving up package identity is a burden, and 
> a deterrent to third-party package releases.
> For a real-world example, see "http://planet.racket-lang.org/", where it 
> looks like most of the familiar names (who were going to a good amount 
> of trouble to release already), managed to release packages marked as 
> non-backward-compatible (i.e., PLaneT major version number other than 
> 1).  Wouldn't requiring them to never break backward compatibility be a 
> deterrent to releasing at all? Or, if they still released, would 
> `dherman`, following the instructions of Racket to create a new package 
> identity for any backward-incompatible version, have given us packages 
> `javascript`, `javascript2`, ... `javascript9`, rather than `javascript` 
> versions `1.x` through `9.x`.
> No-backward-incompatibility might make sense for core Racket (although 
> even core Racket has broken this multiple times), but it's a big 
> deterrent to researchers, and to industry developers who are willing to 
> open source components of their larger systems in lightweight ways.
> Regarding #2, I suggest that should be revisited if #1 is revisited.
> I think PLaneT got both of these a lot closer to right, at least for 
> third-party packages.
> Neil V.
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev

Posted on the dev mailing list.