[racket-dev] Generics updates

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Wed Jul 24 14:41:31 EDT 2013

Thanks for those pointers, Tobias, I'll get those fixed.

Carl Eastlund

On Wed, Jul 24, 2013 at 1:34 PM, Tobias Hammer <tobias.hammer at dlr.de> wrote:

> 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<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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20130724/f8b141f7/attachment.html>

Posted on the dev mailing list.