The disadvantage of purity

berni44 dlang at
Sun Dec 29 10:02:48 UTC 2019

I recently looked at issue 3821 (detecting recursive data 
structures in std.format to avoid a crash) [1]. I think, it could 
be easily fixed by collecting pointers to objects where toString 
is called and preventing a second call. Unfortunately (some 
instances of) format would not be pure anymore and this entails a 
lot of other functions which would loose it's purity. (And it 
doesn't work in CTFE, but that's an other story.)

The weird thing is, that the original call to the function 
(formatObject in std.format) would behave like a pure function: 
The result is always the same and the non local changes are 
temporary and not visible from the outside. The problem is, that 
this function should indeed return something different, when it 
calls itself (indirectly) with identical parameters once more to 
prevent the original call from never returning...

I have not yet a deep understanding of purity, so maybe there is 
a way arround this problem I cannot see due to my limited 
knowledge. Any ideas?

And, maybe somewhat heretical: Does the advantage of purity here 
really outweight the problems it causes?


More information about the Digitalmars-d mailing list