It seems pure ain't so pure after all

Jakob Ovrum jakobovrum at gmail.com
Mon Oct 1 01:01:03 PDT 2012


On Monday, 1 October 2012 at 06:25:19 UTC, Tommi wrote:
> On Monday, 1 October 2012 at 06:18:48 UTC, Jonathan M Davis 
> wrote:
>>
>> A function which uses __ctfe should probably do essentially 
>> the same thing at
>> both runtime and compile time, but it _has_ __ctfe, because 
>> the runtime
>> implementation won't work at compile time, and it's up to the 
>> programmer to
>> make sure that the function does what it's supposed to at both 
>> compile time
>> and runtime. The compiler can't possibly enforce that.
>
> Thus we're in a situation where pure means pure only by 
> convention, not because it's enforced by the compiler. It's 
> like const in c++ then, it's const only by convention, only 
> because people promise that they're not going to mutate it. I 
> don't like rules that are enforced only by everybody relying on 
> good manners.

The only real problem here is that you wrote a function called 
pow2 that effectively returns 6 unconditionally. I doubt your 
math professor would be particularly impressed. If you had used 
__ctfe properly, it would return the same value both at 
compile-time and runtime. At present, __ctfe is a necessary evil 
as CTFE can be severely crippled without it.



More information about the Digitalmars-d mailing list