Properties: a.b.c = 3
Benji Smith
dlanguage at benjismith.net
Thu Jul 30 18:36:53 PDT 2009
Chad J wrote:
> Steven Schveighoffer wrote:
>>> struct Rectangle
>>> {
>>> float x,y,w,h;
>>> }
>>>
>>> class Widget
>>> {
>>> Rectangle _rect;
>>> Rectangle rect() { return _rect; }
>>> Rectangle rect(Rectangle r) { return _rect = r; }
>>> // etc
>>> }
>>>
>>> void main()
>>> {
>>> auto widget = new Widget();
>>>
>>> // DOES WORK:
>>> auto tmp = widget.rect;
>>> tmp.w = 200;
>>> tmp.h = 100;
>>> widget.rect = tmp;
>>>
>>> // DOES NOT WORK:
>>> // widget.rect.w = 200;
>>> // widget.rect.h = 100;
>>> }
>> Wouldn't the compiler write:
>>
>> //widget.rect.w = 200 translates to
>> auto tmp1 = widget.rect;
>> tmp1.w = 200;
>> widget.rect = tmp1;
>>
>> //widget.rect.h = 100 translates to
>> auto tmp2 = widget.rect;
>> tmp2.h = 100;
>> widget.rect = tmp2;
>>
>> ???
>>
>> Unless you want some serious optimization requirements...
>>
>> -Steve
>
> It would.
>
> The optimization you speak of is reference caching. I often do it by
> hand in deeply nested loops where it actually means a damn. It's also
> an optimization I think compilers should do, because it is useful in
> many more cases than just this.
>
> Using some manner of property syntax would not preclude the programmer
> from writing the optimized version of the code by hand.
And, in fact, this exact kind of optimization is made very simple if the
compiler uses a static single assignment (SSA) form for its internal
code representation. The LLVM suite already does it.
--benji
More information about the Digitalmars-d
mailing list