On Wed, Feb 22, 2017 at 04:08:45PM +0000, Stefan Koch via Digitalmars-d-learn 
wrote:
> On Wednesday, 22 February 2017 at 15:27:22 UTC, H. S. Teoh wrote:
> > (In fact, now I'm wondering if we could just hack dmd to emit the
> > equivalent of this code as a lowering, whenever the user tries to
> > declare a compile-time initialized AA.)
> 
> All the problems disappear if the AA's are compiler visible and
> CTFEable code.

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.


> There is as far as I know a project by Martin Nowak that does that.
> And uses templates for AA's rather then whacky TypeInfos.
> 
> So in the future this problem will disappear.

Oh I know, the problem is that this "future" has been taking a long time
arriving.  I was involved in an early (but unfortunately unsuccessful)
effort to rewrite AA's as library code.  But there was simply too much
compiler magic involved with AA's that it couldn't work at the time.

Much of this magic has been dispelled over the past few years, though,
so we should be in better shape now for moving AA's completely into the
library.  I'm very much looking forward to Martin's implementation when
it's ready.

But in the meantime, lowering compile-time initialized AA's could have
the above hack as a temporary workaround until we can get AA literals to
be embeddable in object code.


T

-- 
GEEK = Gatherer of Extremely Enlightening Knowledge

Reply via email to