How do I use CTFE to generate an immutable associative array at compile time?

Stefan Koch via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Feb 22 10:17:14 PST 2017


On Wednesday, 22 February 2017 at 17:05:17 UTC, H. S. Teoh wrote:
> On Wed, Feb 22, 2017 at 04:08:45PM +0000, Stefan Koch via 
> Digitalmars-d-learn wrote:
>> [...]
>
> I'm not sure it's that simple.  Just because AA's become 
> CTFEable doesn't mean they will automatically be convertible to 
> object code in the executable that allows runtime AA lookups.  
> For instance, a CTFE pointer will have a value that has no 
> correspondence with the object code in the executable, and 
> neither will memory allocated during CTFE have any 
> correspondence with the emitted object code (because this 
> memory is allocated in the compiler, not in the object code). 
> So if the CTFE AA implementation allocates nodes for storing 
> key/value pairs, they will only exist in the CTFE engine, and 
> pointers to them will only make sense within the CTFE engine.  
> In order to make them work in the executable (so that you can 
> do AA lookups to these computed nodes at runtime), you will 
> need to somehow map them to object code.  Just because AA's 
> become CTFEable will not automatically solve this for you.
>
> [...]

The CTFE allocated memory can be copied into the object file 
verbatim because the structure is the same. Pointers are easy to 
fix up as well, because by definition the have to point to static 
data that will be in the object file.


More information about the Digitalmars-d-learn mailing list