Discussion Thread: DIP 1042--ProtoObject--Community Review Round 1
Paul Backus
snarwin at gmail.com
Sat Jan 15 15:44:17 UTC 2022
On Saturday, 15 January 2022 at 10:40:29 UTC, Timon Gehr wrote:
>> And d has no problem with pure functions doing things to
>> pointers that are passed to them anyway.
>
> It makes absolutely no sense that a @safe pure function can
> cast an int* to size_t. It violates the spec of pure functions,
> because pure functions can create new int* with addresses that
> depend on global state, so if they can in turn create integers
> from those, that will produce non-deterministic results.
The spec explicitly allows such non-deterministic results; it
just says that the behavior of calling such a function is
implementation-defined:
> **Implementation Defined:** An implementation may assume that a
> strongly pure function that returns a result without mutable
> indirections will have the same effect for all invocations with
> equivalent arguments. It is allowed to memoize the result of
> the function under the assumption that equivalent parameters
> always produce equivalent results. *A strongly pure function
> may still have behavior inconsistent with memoization by e.g.
> using casts or by changing behavior depending on the address of
> its parameters.* An implementation is currently not required to
> enforce validity of memoization in all cases.
(From https://dlang.org/spec/function.html#pure-functions.
Emphasis added.)
More information about the Digitalmars-d
mailing list