On Monday, 17 November 2025 at 14:46:06 UTC, Brother Bill wrote:
Pure functions in Functional Programming provide the same
result when provided the same arguments.
They are not allowed to read or write to system resources such
as file system, console, clock, network, etc. In addition,
they may not read/write to module level variables.
In D, they are allowed to mutate parameters which seems to
violate purity. Why did D make this choice and when to best
exploit this architectural decision.
Also, would you agree that not mutating parameters to have
"true" purity would be preferred?
There's a separate mechanism for describing the immutability of
parameters, and that's by using `const`/`immutable`/`in` for each
parameter. The `pure` keyword for me, covers the rest of the
purity of the function (globals). You could argue that `pure`
should enforce `const` or `immutable` for each parameter, but I
don't think that's a good idea as parameters are commonly used to
return values and I think marking a function that returns values
in one or more parameters `pure` to enforce that the function
doesn't change any globals still has value