D's treatment of values versus side-effect free nullary functions
Don
nospam at nospam.com
Sun Jul 25 15:04:52 PDT 2010
Jim Balter wrote:
> "Walter Bright" <newshound2 at digitalmars.com> wrote in message
> news:i2flvi$4io$1 at digitalmars.com...
>> Don wrote:
>>> Being marked as 'pure' is no guarantee that the function will terminate.
>>
>> Right, and the compiler makes no attempt to check this, either.
>
> Of course the compiler makes no attempt to check -- that *would* be the
> halting problem, but there's no reason for a compiler to attempt such a
> check even if it could be done.
>
> Pure functions invoked on constant values are excellent candidates for
> CTFE because they have no side effects and are computable at compile
> time -- if they terminate. But pure functions that don't terminate are
> almost entirely pointless;
It's a bug.
the only non-pointless example I can think of
> is a kernel''s idle process on machines without an interruptable halt
> instruction. Even if there were useful non-terminating pure functions,
> intentionally putting the keyword "pure" on a function that doesn't
> terminate is doable but dumb. Of course, unintentionally doing so is a
> mistake. But dumbth and mistakes do happen, so the compiler can guard
> against taking forever -- or too long, period (Ackermann's Function is a
> famous example of a pure function that takes astronomically long to
> compute even on small input values -- good luck on writing a compiler
> that can detect such functions) -- by setting a timer. If the timer goes
> off before the computation completes, the compiler should abandon CTFE
> and print a warning message (unless suppressed by a pragma), since the
> function is most likely buggy (this satisfies Rainer Deyke's point that
> errors, including run-on functions, should be detected at compile time
> rather than waiting for runtime).
I don't think you can say that it's "most likely buggy". A function to
calculate pi, for example, is a pure function that may take days to run.
More information about the Digitalmars-d
mailing list