Is This a Bug
Jonathan M Davis
jmdavisProg at gmx.com
Wed Oct 26 10:01:09 PDT 2011
On Wednesday, October 26, 2011 03:04 bearophile wrote:
> Jonathan M Davis:
> > On Wednesday, October 26, 2011 11:15:20 Gor Gyolchanyan wrote:
> > > I see. But is there any practical advantage of a function being pure?
> > > I mean, besides an optimization hint for the compiler, of course.
> >
> > 1. You know that it doesn't access global variables, which is at minimum
> > an advantage as far as understanding the code goes.
>
> The lack of side effects makes it (maybe) less hard to understand code,
> makes testing and unit testing simpler, and allows some optimizations,
> like replacing filter(map()) with a map(filter())...
>
> In DMD 2.056 several functions and higher order functions like array(),
> map(), filter(), etc, aren't (always) pure, so I think D/Phobos purity
> needs a bit of improvement. This compiles:
>
> import std.algorithm;
> void main() pure {
> int[] a;
> map!((int x){ return x; })(a);
> map!((x){ return x; })(a);
> }
>
>
> This doesn't:
>
> import std.algorithm, std.array;
> void main() pure {
> int[] a;
> map!q{ a }(a);
> filter!q{ a }(a);
> array(a);
> int[int] aa;
> aa.byKey();
> aa.byValue();
> aa.keys;
> aa.values;
> aa.get(0, 0);
> aa.rehash;
> }
That's because the functions for associative arrays haven't been fixed up for
purity yet. It'll happen. The situation with pure has already improved
drastically over the last few releases.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list