FSet 1.2 Release Notes

There are no very major changes to FSet for 1.2. There are a fair number of detail improvements, and of course some bug fixes. Since 1.1 I have actually had the chance to use FSet in a couple of projects, and I love it! But I would, of course :)

Largely as a result of that experience, FSet 1.2 has improved support for extending FSet to handle user-defined types. See compare-slots and identity-ordering-mixin (both described in the spiffy new tutorial).

There were a couple of changes to existing interfaces:

fold is deprecated in favor of reduce, which shadows/genericizes cl:reduce and has a slightly different interface. (fold dates back to a time when I wasn't doing nearly so much shadowing, but now that there are lots of shadowed/genericized CL functions, it makes sense for reduce to be one of them.)

I decided I liked the name contains? better than member?, with the opposite argument order. Most FSet functions that take both a collection and a value or possible value of the collection or its domain take the collection as the first argument, like cl:aref and cl:elt and unlike cl:assoc and cl:gethash; the only exception among FSet's own interfaces was member? (the shadowed CL sequence functions find, count, etc. take the collection second, and so are not consistent with the FSet convention, but these need to remain compatible with their CL versions, so I can't change them). So, I now consider member? deprecated (a back-compatibility function remains), and encourage the use of contains? instead. Also, it used to be the case that member? on a map would tell you whether the value was a member of the map's domain; now there are separate operations domain-contains? and range-contains? which work on both maps and seqs. range-contains? performs a linear search.

FSet 1.2 includes experimental code for some new types:

By the way, there are places where we assume that no collection has more than most-positive-fixnum elements. This is a pretty safe assumption in most implementations.