newCTFE: perliminary delegate support is in!
Cym13
cpicard at openmailbox.org
Wed Jun 13 06:10:26 UTC 2018
On Wednesday, 13 June 2018 at 05:57:31 UTC, Stefan Koch wrote:
> Good day ladies and gentleman,
>
> it is my distinct please to announce that a new feature just
> landed in newCTFE.
>
> !!! DELEGATES !!!
>
> this means the following code will now work:
> int square_of_x_plus_x(int x) pure
> {
> int passThrough(int y) pure
> {
> assert(x == y);
> int y2 = x;
> assert(y2 == y);
>
> int fnC() pure
> {
> auto z = (x * y);
> assert(y2 == x);
> assert(x == y);
> return z;
> }
> return fnC();
> }
> return x + passThrough(x);
> }
>
> pragma(msg, square_of_x_plus_x(7));
> static assert(square_of_x_plus_x(5) == (5*5)+5);
>
> the reason why this was quite tricky to implement is that
> in the newCTFE architecture there is no concept of a function
> touching
> the stack-frame of another function _at all_.
> (Infact there is no conventional stack, rather the virtual
> registers themselves stack)
> Sharing of the stack frames gets emulated via a hidden
> parameter and a linked-list structure.
>
> Cheers,
> Stefan
That's very nice! Out of curiosity, what was the reason to avoid
a conventional stack? Or was it a consequence more than a design
decision? (If you've explained it before, feel free to just throw
the old post at me)
More information about the Digitalmars-d
mailing list