pure functions cannot be removed, actually: pure vs. total

Johan Engelen j at j.nl
Thu Jun 7 20:14:19 UTC 2018


On Tuesday, 5 June 2018 at 14:48:23 UTC, FeepingCreature wrote:
> I'm just posting to clear up the misunderstanding that a call 
> to a pure function can be removed. Actually, even calls to 
> strongly pure functions cannot always be removed. This is 
> because there is one thing that a pure function can do that 
> will change program behavior if it is removed, even if it does 
> not change any global state whatsoever: it can simply never 
> return.
>
> void foo() pure { while (true) { } }

This is not a valid program, in my opinion. (Still only my 
opinion, because I have not found it in the D spec, so needs 
adding.)
A valid C++ program must make progress in each thread. C++ spec 
states:
"The implementation may assume that any thread will eventually do 
one of the following:
- terminate,
- make a call to a library I/O function,
- access or modify a volatile object, or
- perform a synchronization operation or an atomic operation."

-Johan



More information about the Digitalmars-d mailing list