purity question
ag0aep6g via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue May 30 07:54:13 PDT 2017
On 05/30/2017 11:12 AM, Rene Zwanenburg wrote:
> If malloc were marked as pure, wouldn't that mean it must return the
> same pointer every time you call it with the same size?
D's `pure` mostly means: "does not access mutable state, and does not do
input/output".
There is never a requirement that a function must return the same value
for the same input. But a compiler is allowed to memoize the result of a
`pure` function when it has no mutable indirections in its parameter and
return types. Such a function is "strongly pure".
When there are mutable indirections, the function is "weakly pure".
Weakly pure functions are not assumed to be memoizable, but "weakly
pure" still has meaning:
* Can call weakly pure functions from strongly pure ones.
* When a weakly pure function has mutable indirections in the return
type but not in the parameters (like malloc), then it must be returning
freshly allocated memory. That means, the result cannot be referenced
from anywhere else. So it can be converted to const/immutable/shared
implicitly. The spec calls that a "pure factory function".
Repeating Biotronic's links, the spec and David Nadlinger's article are
the go-to resources for D's take on purity:
https://dlang.org/spec/function.html#pure-functions
http://klickverbot.at/blog/2012/05/purity-in-d/
More information about the Digitalmars-d-learn
mailing list