Revised RFC on range design for D2

Sergey Gromov snake.scaly at gmail.com
Mon Sep 29 10:17:25 PDT 2008


Sun, 28 Sep 2008 22:53:13 -0500,
Andrei Alexandrescu wrote:
> Bill Baxter wrote:
> > The rule is trivial, you may say.  But how about co-variant return
> > types?  If FooSub is a subclass of Foo, then is it ok for the getter
> > to return one and setter to take the other?  Or vice versa?  Or how
> > about implicit conversions.  If my getter takes a long, but my setter
> > returns an int, is that ok?  How do const variations fit in?  Probably
> > there's a way to fit those all neatly in an automatic rule (or just
> > disallow them), but it just makes the rule longer and even harder to
> > keep in mind (or cuts off functionality people may need).
> 
> Yah, I was thinking of all these and then some more while I was posting.
> 
> I think it's another duck typing thing. If you can call:
> 
> entity.prop(entity.prop);
> 
> then you can consider prop a property, period. Entity could be anything 
> that allows the dot member access (object, class, struct, union, 
> template, or module). Given that there is no global scope in D, that 
> takes care of everything. I think it's really hard to get any simpler 
> than that.

D has a simple rule for property methods.  This rule has side effects.  
If the side effects are so bad that a hack is required to counter them,
then the rule should be replaced with a better one.  Otherwise your hack 
will inevitably introduce new, less obvious side effects than those it 
were supposed to fight, and will finally require other hacks.

struct Range
{
  ref int head() {...}
}
Range r;
r.head = 5; // error


More information about the Digitalmars-d-announce mailing list