newCTFE Status October 2021
Stefan Koch
uplink.coder at googlemail.com
Sun Oct 17 11:44:24 UTC 2021
Hi Guys,
I know I have been quiet about newCTFE for a while, mainly I have
been focusing on other features which would make it more
important, since a lot of the compile-time of certain companies
is not spent in CTFE.
However recently I had the urge to fix an early design mistake in
newCTFE.
And that was that newCTFE had no notion of a frame pointer.
Which made it impossible to easily take pointers of locals.
What newCTFE would do when it was asked to take the address of a
local variable was to allocate space space on the heap.
Copy the local to the heap.
and then convert the local variable into a pointer to that heap
location under the hood.
so
```D
int x = 22;
int* y = &x;
```
would become:
```D
int x = 22;
void* _mem_y = malloc(x.sizeof);
memcpy(mem_y, &x, z.sizeof);
int* y = cast(int*)mem_y,
&x = y; // this line represents nasty compiler magic
```
Now however I have the concept of a frame pointer, and things
becomes much cleaner
The code above becomes:
```D
int x = 22;
int* y = framePointer + OffsetFromFramePointer(x);
```
And no nasty syncing of different memory locations is required
anymore ;)
Cheers,
Stefan
More information about the Digitalmars-d
mailing list