alias restriction??!
Paul Backus
snarwin at gmail.com
Sun Jul 19 17:06:14 UTC 2020
On Sunday, 19 July 2020 at 16:00:28 UTC, Basile B. wrote:
> On Sunday, 19 July 2020 at 15:00:59 UTC, Paul Backus wrote:
>> On Sunday, 19 July 2020 at 12:42:47 UTC, Carl Sturtivant wrote:
>>> On Sunday, 19 July 2020 at 12:08:07 UTC, Paul Backus wrote:
>>>>
>>>> Easiest workaround:
>>>>
>>>> ref inout(long) Second() inout { return second.one; }
>>>
>>> Was trying to avoid this for performance reasons. In fact
>>> what are the performance implications of this sort of thing
>>> with current implementations? --- relative to using a simple
>>> offset.
>>
>> Almost certainly no difference at all. Even DMD can inline
>> this function:
>>
>> https://d.godbolt.org/z/7ve6M8
>
> The alias proposal matches to the "code fast" moto. When you do
> object composition with several level of nesting this would be
> a time saver.
It replaces something that's already a one-liner with a slightly
shorter one-liner. Color me unimpressed.
Also, letting aliases refer to expressions essentially allows AST
macros in through the back door. Consider the following example:
template counter()
{
struct Counter
{
static size_t count;
size_t next() { return count++; }
}
alias counter = Counter.init.next;
}
void main()
{
import std.stdio: writeln;
writeln(counter!()); // 0
writeln(counter!()); // 1
writeln(counter!()); // 2
}
This program compiles, runs, and prints the indicated output
using the version of dmd built from the member-alias pull request
[1].
Personally, I'm in favor of AST macros, but if we're going to add
them to D, I think we should do it intentionally, rather than by
accident, and there should be a DIP.
[1] https://github.com/dlang/dmd/pull/11273
More information about the Digitalmars-d-learn
mailing list