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