[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Reasons for withdrawal



At Wed, 29 Oct 2003 22:42:25 -0600, scgmille@xxxxxxxxxxxxxxxxxx wrote:
> 
> On Thu, Oct 30, 2003 at 11:14:52AM +0900, Alex Shinn wrote:
> >
> >    1) single vs. multiple inheritance
> >        - just say single!
> >        - if multiple, what CPL do you use?
> 
> Lets say single.  Its conceivable that a datastructure could support
> more than one type (list set, list bag), but I think that in that case
> you just make two collections instead.

A more common example might be the hash-table (dictionary) + av-tree
(sequence), which allows you both O(1) access and O(n) ordered
enumeration.  The order can be either a < predicate or by insertion
order into the dictionary.  These are actually fairly useful data types
that Perl, for a start, has standard modules for.

You can get around this without multiple inheritance though, it just
bloats your hierarchy and code a little.

> >    2) single vs. multiple dispatch
> >        - multiple is probably needed for *-union, etc.
> >        - if multiple, how do you resolve conflicts?
> 
> Could you illuminate a potential conflict (I believe you, I just want 
> some concrete things to think about).

Given

  (collection= <set> <bag>)  

do you dispatch on the <set> or on the <bag>?  Do you allow overloading
a dispatch for the particular case of <set> & <bag>?

Also

  (add-all <bag-of-apples> <bag-of-oranges>)

  (intersection <set-of-primes> <set-of-2^n-1>)

etc.

> >    3) abstract vs. concrete
> >        - can concrete classes be sub-classed?
> I would like to say no, for simplicity.  You could subclass in the 
> implementation in order to make two collections, but two concrete 
> collections cannot inherit from each other, only from the generic super 
> classes.  I could be argued out of this position.

Well, this makes getting around single inheritance harder.

> >        - can new abstract classes be made?
> Sure.  It merely implies a new set of generic operators.

OK.  I forgot to ask about new methods - are they allowed?

The next thing the SRFI really should provide is the syntax for the
above operations, like (define-collection-type ...), otherwise you are
precluding in advance any extensions from being portable.  They would
have to go through non-trivial rewriting for every dispatch
implementation they are to be ported to.

-- 
Alex