Design for collections upgrades

Brian Goetz brian.goetz at
Tue Mar 8 13:10:20 PST 2011

> This would be my preference. Make everything that doesn't need to actually
> iterate lazy by default and do copying at the end if necessary.

We're reluctant to do that, because nothing else in Collections is lazy 
by default.  This is one of the biggest gotchas of LinQ in .NET; the 
queries are lazy, but they sure look eager to the untrained eye, and 
this produces surprising results.  We believe that a big difference like 
eager/lazy should be reflected in the type system, such as by returning 
an abstraction like Stream.  Having some collections be lazy and some be 
eager is asking for trouble...

Further, I think the choice of eager/lazy is a reasonable one to give 
the programmer.  Programmers who do not need the features offered by 
laziness shouldn't need to learn how laziness works just to use the new 
collection operations.

More information about the lambda-dev mailing list