I really like the new set features, especially mutable sets and lists as sets.

Two things i have notices:
* The docs for set-intersect seem a bit mixed up with set-union stuff
* I could not get set-intersect on lists working, what i've tried

-> (set-intersect '(1 2 3) '(2 3 4))
; set-add: contract violation
;   expected: set?
;   given: 2

-> (set-intersect (list->set '(1 2 3)) '(2 3 4))
; set-intersect: set arguments have incompatible equivalence predicates
;   first set: (set 1 2 3)
;   incompatible set: '(2 3 4)


On Tue, 23 Jul 2013 17:37:15 +0200, Carl Eastlund <c...@ccs.neu.edu> wrote:

My work on adding gen:set, and related changes to define-generics and
gen:dict, is ready for review and (hopefully) to push to the master
branch. The branch moved in the process of cleaning things up, it's now at:


(The "from scratch" just refers to the process of rebuilding the git
history, I didn't go out of my way to rewrite anything in the code base
from scratch, although in some places a lot of code did move around.)

What's new in the branch:

- Generics now support a few new options
  - #:fallbacks specifies fallback method implementations for instances
with no implementation
  - #:fast-defaults specifies instances on a "fast path", useful for
built-in types
- #:defined-predicate gives a more intuitive and efficient interface than
  - #:derive-property allows generics to piggy-back on existing struct

- Sets are now a generic datatype through gen:set
  - lists are now sets
  - the built-in set types are now documented as "hash sets"
  - there are mutable and weak hash sets
  - you can define new set types quickly with define-custom-set-types
  - most set operations are now methods with fallbacks
  - sets now support -copy and -clear operations, plus mutating [!]
versions of operations

- Dictionaries have a few changes
  - new macro define-custom-hash-types [*]
  - most dict operations are now methods with fallbacks
  - dicts now support -copy, -clear, -clear!, and -empty? operations

I've run some benchmarks and performance of the various generic operations are comparable to the current HEAD, so there should be no major performance
changes with this patch.

[*] I've added define-custom-hash-types and define-custom-set-types rather
than just adding make-custom-set akin to make-custom-hash because
make-custom-hash is hard to use.  The documented behavior -- that any
custom hash is equal to any other created with the same bindings and
predicates / hash functions -- was never true and can be expensive or at
least tricky to implement.  It seemed more sensible to just remove the
erroneous documentation on make-custom-hash, and add the definition form to
create constructors for new, explicitly-compatible dict and set types.
Both definition forms bind predicates and constructors for new (set or
dict) types with immutable, mutable, and weak variants that inter-operate.

If there are no serious issues brought up in the next day or two, I'll push
it to the development branch, since our current release process isn't
following HEAD.

Carl Eastlund

Tobias Hammer
DLR / Robotics and Mechatronics Center (RMC)
Muenchner Str. 20, D-82234 Wessling
Tel.: 08153/28-1487
Mail: tobias.ham...@dlr.de
 Racket Developers list:

Reply via email to