D's treatment of values versus side-effect free nullary functions
Jim Balter
Jim at Balter.name
Sat Jul 24 04:50:11 PDT 2010
"Jonathan M Davis" <jmdavisprog at gmail.com> wrote in message
news:mailman.435.1279700666.24349.digitalmars-d at puremagic.com...
> On Wednesday 21 July 2010 00:09:05 Don wrote:
>> While running the semantic on each function body, the compiler could
>> fairly easily check to see if the function is CTFEable. (The main
>> complication is that it has to guess about how many iterations are
>> performed in loops). Then, when a CTFEable function is called with
>> compile-time constants as arguments, it could run CTFE on it, even if it
>> is not mandatory.
>>
>> Incidentally, having the function being marked as 'pure' doesn't really
>> help at all for determining if it is CTFEable.
>
> Hmm. As I understood it, it did.
You understood right.
> But I guess that if it did, the compiler could
> technically determine whether a function was actually pure anyway by
> looking at
> its body. All the pure attribute would do is save it the trouble. So, the
> pure
> attribute wouldn't do much in that sense except save the compiler some
> computation.
pure functions must halt, so the attribute let's you tell the compiler
something that it could only figure out with difficulty, if at all.
>
> I can certainly see why being pure wouldn't be enough to be CTFEable
> (since pure
> doesn't guarantee anything about whether it's parameters are know at
> compile
> time), but I would have thought that the lack of global state would be
> required
> - at least the lack of global state which isn't known at compile time -
> for it
> to be CTFEable, in which case the pureness would help.
>
> In any case, I'd obviously have to study it up a bit more to understand
> exactly
> what's required for CTFEability. I have some idea, but obviously not
> enough.
>
> - Jonathan M Davis
More information about the Digitalmars-d
mailing list