[racket-dev] Generics updates

From: Tobias Hammer (tobias.hammer at dlr.de)
Date: Wed Jul 24 13:34:17 EDT 2013

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)

Tobias


On Tue, 23 Jul 2013 17:37:15 +0200, Carl Eastlund <cce at 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:
>
>   https://github.com/carl-eastlund/racket/tree/generics-from-scratch
>
> (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
> #:defined-table
>   - #:derive-property allows generics to piggy-back on existing struct
> properties
>
> - 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.hammer at dlr.de

Posted on the dev mailing list.