[racket-dev] Mangaging `unstable` with packages

From: Sam Tobin-Hochstadt (samth at ccs.neu.edu)
Date: Fri Jun 21 18:17:29 EDT 2013

The new package organization gives us a chance to re-asses the
"unstable" collection.

Going forward, I think the "unstable" collection should be used in the
following ways:

1. If you build something that you think is general-purpose, but is
only used in one package, put it in `unstable/foo`, but keep it inside
that package.

2. If you either (a) want to use some other package's `unstable/foo`
library, or (b) create such a library that's used across multiple
packages, create a separate package called "unstable-foo" for it.

It's perhaps worth saying why we still need "unstable" at all in the
new regime.  We might just create a new package for, say, parameter
groups, and just add that as a dependency of "plot". But that would
ship a library in a useful location, and potentially commit us to that
library and API for the future. So I think we should keep "unstable"
around.

With that said, I'd like to also propose moving the following out of "unstable":

# `unstable/list`

- `remf`, `list-update` `list-set` `map/values`: move to `racket/list`
- `group-by`: rename to `group`, add keyword argument `#:by`
defaulting to `equal?`, move to `racket/list`

- `extend`, `filter/values`: move back into Typed Racket
- `list-prefix?`: move back into the web server

- `map2`, `check-duplicate`, `*-common-prefix`: Delete

# `unstable/parameter-group`

This is used by both the "image" and "plot" libraries. Create a new
top-level collection and package.

# `unstable/latent-contract`

Currently undocumented. Used by the image collection anyway.  This
needs to be fixed.

That's it for things outside of the "unstable" package, which I'll
tackle another time.

Sam

Posted on the dev mailing list.