aliasing expressions and identifiers

deed via Digitalmars-d digitalmars-d at puremagic.com
Mon May 23 10:43:49 PDT 2016


On Monday, 23 May 2016 at 15:18:51 UTC, Nick Treleaven wrote:
> If we had local refs, we could use this instead:
>
> ref m = matrix.rawArr;
>
> The difference is m is already computed, it is not recomputed 
> each time m is read, unlike M(). I think the reason D doesn't 
> support local refs is because it would make it harder to design 
> @safe, particularly with the planned @rc ref-counting. Because 
> M() above is only a return reference, it can't live longer than 
> the data it references. My ref m could persist longer than 
> matrix.rawArr using (naive) reference counting.
>
> BTW local refs are possible in @system code:
> http://forum.dlang.org/post/lmuokynffgljzvrpvkvd@forum.dlang.org

Just to be clear: I'm not looking for anything touching the 
semantics, just a simple replacement mechanism/macro expansion. 
Recomputation or not, @safe or @system, should be no different 
from the expanded code. So within a scope, after aliasing 'm', 
'm' should be replaced by 'matrix.rawArr'. Everything stays the 
same as is, even error messages.

{
   // Some scope

   alias i = instance.targetIdx;
   alias m = matrix.rawArr;

   m[i] = m[j] + m[k];
   // detected and conceptually replaced in one of the earlier 
compiler passes by
   // matrix.rawArr[instance.targetIdx] = matrix.rawArr[j] + 
matrix.rawArr[k]
}


More information about the Digitalmars-d mailing list