On Monday, 27 January 2014 at 01:39:47 UTC, Simen Kjærås wrote:
On 2014-01-26 09:59, Pierre Talbot wrote:> Hi,
>
> I was wondering why CTFE is context sensitive, why don't we
check
> every expressions and run the CTFE if it applies?
Mostly because it's not necessary, and takes more time than
simply compiling it. For an optimization step, opportunistic
CTFE would certainly be possible (it is, after all, simply
constant folding on steroids).
The situations in which CTFE is attempted today are when it's
explicitly required - either because the value is used at
compile time, or because it's assigned to a manifest constant
or static variable (which are defined to be required to be
known at compile time).
This means the compiler does not need to spend inordinate
amounts of time testing to see if the code compiles with CTFE,
and that it can give sensible error messages when something
cannot be CTFE'd. If instead opportunistic CTFE were the norm,
you would need to disassemble your program to see if the
compiler did in fact CTFE the code that you think it should.
--
Simen
We could do opportunistic CTFE by default, and if the user want
to ensure it is done, instead of disassemble the program, he
could just use the usual techniques (static, ...).
But ok, what I wanted to hear is that it is theoretically
possible but technically problematic.
Thanks to all,
Pierre