bearophile wrote:
Don:

CTFE is almost completely isolated from the rest of the compiler: it can't break 
anything that's  not CTFE.<

It's like having a compiler plus a D1 interpreter. In theory this duplication 
looks silly, in practice it seems handy.

Interestingly, by *requiring* the compiler to provide an interpreter, the language can make optimisation guarantees about constant folding, _independent of the backend_.

It is likely, for example, that unions will need to be disallowed in CTFE,<

Can you tell me why?

Suppose you have:

align(2):
struct S
{
  char d;
  int a;
  char [2] b;
}

union U {
  byte[5] a;
  double x;
  S c;
}

and you write to u.c.d, and u.a[3] what value is x? It's disgusting. Depends on the endianness of the target system, for example.

but there's absolutely no reason why 'new' expressions should be disallowed.<
I mean things like:
int [] a = new int[n];
which is trivial -- about 5 lines of code.

Oh. And the D1 spec doesn't disallow inline asm in CTFE.
But CTFE asm is Not Going To Happen. <g>

Reply via email to