On Monday, 19 May 2014 at 18:33:55 UTC, Steven Schveighoffer
wrote:
Anything that uses the order of unrelated addresses is
incorrect outside of the heap code itself.
Nah, not on modern archiectures without GC compaction.
Then you should have no problem producing an example, right?
I did. Besides, I think language constructs should be proven
sound a priori, not post mortem...
The whole POINT of pure functions is that it will return the
same thing. The fact that it lives in a different piece of
memory or not is not important. We have to accept that. Any
code that DEPENDS on that being in a different address is
broken.
Which neans you cannot safely plug a pure function into a generic
algorithm unless it testsfor purity.
For instance, I would consider it fully possible and
reasonable, and to only break already-broken code (except for
testing implementation, which would have to change anyway), to
make idup just return the argument if the argument is immutable.
That could easily break sound code that need guards with
different identities.