--- Comment #3 from Denis Shelomovskij <verylonglogin....@gmail.com> 2012-06-02
14:29:01 MSD ---
(In reply to comment #1)
> The current behavior is by design, and perfectly fine – note that `pure` in D
> just means that a function doesn't access global (mutable) state. A pointer
> somewhere isn't a problem either, since the caller must have obtained the
> address from somewhere, and if it was indeed from global state, the calling
> code couldn't be pure.
OK. Looks like everything works but I don't understand how. So could you please
answer the question (read this to the end).
According to http://dlang.org/function.html#pure-functions
> Pure functions are functions that produce the same result for the same
And my original question is
> The Question: What exactly does these pure functions consider as `argument
value` and as `returned value`?
int f(in int* p) pure;
auto arr = new int;
auto res = f(arr.ptr);
assert(res == f(arr.ptr));
assert(res == f(arr.ptr + 1)); // *p isn't changed
arr = 7;
assert(res == f(arr.ptr)); // neither p nor *p is changed
arr = 7;
assert(res == f(arr.ptr)); // p isn't changed
Which asserts must pass?
The second assert is here according to
http://klickverbot.at/blog/2012/05/purity-in-d/ (yes, it's "Indirections in
the Return Type?" section, but sentences looks general and I think it can be
treated this way):
> The first essential point are addresses, respectively the definition of
> equality applied when considering referential transparency. In functional
> languages, the actual memory address that some value resides at is usually of
> little to no importance. D being a system programming language, however,
> exposes this concept.
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------