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