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

Timon Gehr timon.gehr at gmx.ch
Mon Jun 11 14:39:12 UTC 2018


On 08.06.2018 01:14, Steven Schveighoffer wrote:
> 
> No matter what is inside fn, it will return S.init, if it returns. The 
> question to answer is, can we assume all functions don't enter infinite 
> loops, and if we can assume this, then why couldn't the compiler simply 
> replace a call to fn with S.init?
> 
> And the case FeepingCreature gives is pretty compelling, because it's a 
> real example, not a toy example.
> 
> -Steve

FeepingCreature's example does not really qualify as a do-nothing loop, 
because the loop produces a value that you (presumably) later access.

In any case, I don't think the right answer is to make programs that 
enter infinite loops that do nothing undefined behavior (like in C++), 
but they should possibly be allowed to be removed, though it can be 
surprising, see: https://blog.regehr.org/archives/140
(However, the "Fermat" example is a bit contrived, because presumably 
one would also want to print the specific counterexample, breaking the 
"optimization".)


More information about the Digitalmars-d mailing list