Discussion on Go and D

Marco Leise Marco.Leise at gmx.de
Sun Apr 8 20:08:28 PDT 2012


Am Mon, 9 Apr 2012 03:38:15 +0300
schrieb Manu <turkeyman at gmail.com>:

> On 9 April 2012 03:25, Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org>wrote:
> 
> > On 4/8/12 7:21 PM, Andrej Mitrovic wrote:
> >
> >> On 4/9/12, Andrei Alexandrescu<SeeWebsiteForEmai**l at erdani.org<SeeWebsiteForEmail at erdani.org>>
> >>  wrote:
> >>
> >>> and pass-by-alias
> >>>
> >>
> >> Speaking of alias, one killer feature would be to enable using alias
> >> for expressions. E.g.:
> >>
> >> struct Window { struct Point { int x, y; } Point point; }
> >> void test() {
> >>     Window window;
> >>     alias window.point.x x;
> >>     // use 'x' here which is really window.point.x
> >> }
> >>
> >
> > Yah, we should add that at some point. Walter and I discussed about it and
> > it's virtually approved. But to be on the conservative side, it's not for
> > expressions but for mere pointer-chasing chains.
> 
> 
> Why use alias, instead of allowing 'ref' on local declarations?
> The alias approach suffers from complications when referencing a complex
> expression. Particularly if that expression involves a non-pure function
> call. A local ref would seem less problematic to me?

This is a valid concern. I remember the discussion from a while back. alias makes it _look_ shorter and right, but you get what Manu said. Here is another look on it:

MyClass a = foo();
MyClass x = bar();
alias a.c c1;
ref c2 = a.c;
a = x;
c1 = 5; // <- oops, using x instead of a
c2 = 5; // <- more what I expect

Not to say alias for 'moving' targets is a no-go, but I'd rather proper refs. :)

-- 
Marco



More information about the Digitalmars-d mailing list