On Thursday, 15 May 2014 at 05:51:16 UTC, Ola Fosheim Grøstad
wrote:
On Thursday, 15 May 2014 at 02:49:28 UTC, Adam Sakareassen via
Digitalmars-d wrote:
The more D allows 'pure' functions to diverge from functional
purity the less relevant the flag is for compiler
optimisations.
...
By the same reasoning cacheability is important. A pure
function might be called within a loop with a parameter that
is not altered during the loop. If the compiler knows the
function is pure, it can perform the calculation before the
loop and simply reuse the cached result for each iteration.
Yep, purity implies memoing. Malloc and new are not pure
because they return objects that can be differentiated by
address.
There's an important difference between malloc and new: malloc
returns a pointer, but new returns a typed object. This is
crucial IMO, because the returned objects are equal to each
other. They aren't identical, but then different int variables
with the same value aren't identical either, and a function
returning int is still considered pure. So it's not identity (~
address) that matters.
Pure in D seems pointless to me.
Not at all: Don't think of it in terms of low-level optimization
opportunities, but in terms of semantics. For example, you get
the concept of uniqueness. And the optimizations can still be
done, because strongly pure functions can be recognized by their
signatures.