lazy thoughts

Sergey Gromov snake.scaly at gmail.com
Mon Jan 12 09:53:46 PST 2009


Mon, 12 Jan 2009 17:38:40 +0000 (UTC), dsimcha wrote:

> == Quote from Sergey Gromov (snake.scaly at 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.



More information about the Digitalmars-d mailing list