Property discussion wrap-up

Zach the Mystic reachBUTMINUSTHISzach at gOOGLYmail.com
Wed Jan 30 13:58:52 PST 2013


On Wednesday, 30 January 2013 at 19:44:43 UTC, TommiT wrote:
> On Wednesday, 30 January 2013 at 18:05:08 UTC, Zach the Mystic 
> wrote:
>> [..]
>
> How about using this new namespace_thingy keyword:
>
> struct S
> {
>     private int value;
>
>     namespace_thingy prop
>     {
>         int get() { return value; }
>         prop opAssign(int v) { value = v; return prop; }
>
>         // int data; // error: can't have data here
>     }
> }
>
> The compiler would implicitly create something like:
>
> struct S
> {
>     private int value;
>
>     int prop_get() { return value; }
>     int prop_opAssign(int v) { value = v; return prop_get(); }
> }
>
> ...
>
> S s;
> int v1 = s.prop;        // lowered to s.prop_get()
> int v2 = (s.prop = v1); // lowered to s.prop_opAssign(v1)
> assert(v1 == v2);

I think you're thinking along the right lines, but this is no 
better than what's already been suggested. From everything I've 
read, reusing old keywords to do new things in new places is a 
time-honored D tradition, and adding new ones is very much 
frowned upon.

Also, because the "namespace_thingy"s have so much in common with 
structs, I think it would be misleading to call them something 
else. The lowering you're talking about already happens, in its 
own way, with the operator overloads. In fact, these overloads 
were designed *specifically* to allow struct and class instances 
to meld in seamlessly with built-in types.

Just look at Walter's recent article for half floats. The whole 
article demonstrates D's ability to do exactly what everybody is 
trying to get their properties to do. Now we just have to get rid 
of the performance overhead by treating structs with no data as 
namespaces instead of the more commonly held perception that they 
are only supposed to work on their own data! Hurrah!


More information about the Digitalmars-d mailing list