On Thursday, September 22, 2011 23:36:40 Dmitry Olshansky wrote: > On 22.09.2011 22:53, Jesse Phillips wrote: > > The discussion on Reddit brought to my attention that pure functions can > > return and assign to an immutable. > > > > http://www.reddit.com/r/programming/comments/knn5p/thoughts_on_immutabil > > ity_in_d/c2lsgek > > > > I am trying to modify the example request to make use of this, but have > > failed. > > > > http://www.reddit.com/r/programming/comments/knn5p/thoughts_on_immutabil > > ity_in_d/c2lrfpm > > > > test.d(4): Error: cannot implicitly convert expression > > (makeFromArray([1,2,3])) of type test.List!(int).List to > > immutable(List) > > > > Is this a bug? I can't identify where this issue would lie (works with > > inheritance and templating). > Maybe: > -------------------------<<<<<<<<<< > List!T makeFromArray(T)(immutable T[] array) pure { > > > if (array.length == 0) { return null; } > > > > auto result = new Cons!T(array[0], null); > > auto end = result; > > > > for (int i = 1; i< array.length; ++i) { > > > > end.tail_ = new Cons!T(array[i], null); > > end = end.tail_; > > > > } > > > > return result; > > > > } > > If I'm not mistaken only strongly pure functions are working.h
Which would make sense. The only reason that it can implicitly cast to immutable is because it _knows_ that there are no other mutable references to that data, and for it to be able to know that, the function must be strongly pure. - Jonathan M Davis
