Mon, 12 Jan 2009 17:38:40 +0000 (UTC), dsimcha wrote: > == Quote from Sergey Gromov (snake.sc...@gmail.com)'s article >> Mon, 12 Jan 2009 09:05:18 -0800, Andrei Alexandrescu wrote: >>> Also, lazy evaluation has the risk of getting confusing as there's a lot >>> of escaping. Consider: >>> >>> int[] arr = [ 1, 2, 3, 4 ]; >>> auto squares = map!("a * a")(arr); >>> arr[] = [ 5, 6, 7, 8 ]; >>> >>> Now iterating squares will see different numbers than the original ones. >> This part bothers me. Though it's hard to tell how much danger it would >> impose in practice. > > I don't understand how this is any worse/more confusing than any other case of > having multiple aliases to the same memory region.
First, it's an obscure alias. Second, it wasn't so in the previous implementation of std.algorithm. OTOH these are mitigated by the fact you're going to re-visit the map!() usage in your code anyway. Also I've got an impression that Phobos tried to avoid dangerous aliasing as much as possible by using immutable argiments in aliasing algorithms. map() obviously refuses to follow this rule. On an unrelated note, I probably should make a post about Phobos overusing immutable arguments. This is a direct consequence of declaring string as an alias of immutable(char)[] which is IMHO plain wrong.