Wed, 22 Sep 2010 04:21:39 +0200, Don wrote: > The docs currently state that: > --- > Pure functions are functions that produce the same result for the same > arguments. To that end, a pure function: > > * has parameters that are all immutable or are implicitly > convertible to immutable > * does not read or write any global mutable state > --- > > This is extremely restrictive, and not currently enforced. Two specific > limitations: > - a 'pure' member function doesn't really make sense (could only be > called on an immutable class) > - a pure function cannot have 'out' parameters. > > In a discussion on D.learn, Steven Schveighoffer noted that it's only > shared variables which make things complicated. The limitations exist > because 'pure' is used to mean both 'no hidden state' AND 'cachable'. > But 'cachable' is really only an implementation detail. > > PROPOSAL: > Drop the first requirement. Only one requirement is necessary: > > A pure function does not read or write any global mutable state.
A purely functional language provides referential transparency: the same arguments applied to the function always return the same result.