It seems pure ain't so pure after all

foobar foo at bar.com
Mon Oct 1 11:02:48 PDT 2012


On Monday, 1 October 2012 at 17:46:00 UTC, Tommi wrote:
> On Monday, 1 October 2012 at 08:04:49 UTC, Jonathan M Davis 
> wrote:
>> And you _can't_ determine ahead of time which functions can be 
>> safely executed at compile time either, because that's an
>> instance of the halting problem.
>
> I don't understand (I did read what "halting problem" means 
> just now, but I still don't understand). If there was no __ctfe 
> variable, and thus a guarantee that all functions do the same 
> thing at compile-time and run-time, couldn't the compiler just 
> try aggressively to execute all function calls at compile-time? 
> Obviously it wouldn't bother trying CTFE for function calls 
> that had arguments which weren't evaluable at compile-time. Nor 
> would it bother with functions that it knows have memory 
> allocations or other limitations of CTFE.
>
> If not a compiler flag, then it could be a function attribute. 
> Just like c++ function attribute constexpr, which guarantees 
> that the function executes at compile time given you provide it 
> with compile-time evaluable arguments (and there are 
> limitations to what the function can do). Why wouldn't this 
> attribute be possible with D?

__ctfe is a horrible yet very useful hack to address the 
underlying issue - the execution model for CTFE, which I 
personally do not agree with. Adding a compiler flag for the 
existing model, makes no sense whatsoever. Functions are 
essentially a run-time abstraction and the compiler generally 
speaking has no business trying to execute them at compile-time. 
The compiler is after all *not* an interpreter.

Besides, what would be the use case for such a flag anyway? If 
you already know that all parameters are known at compile-time, 
you can already "tell" the compiler to execute the function by 
assigning to a static/enum variable.

IMO, this mixing of code for various stages of execution is bad 
design but this cannot be changed in a backwards compatible way.


More information about the Digitalmars-d mailing list