Lazy evaluation has all sorts of issues, like capturing potentially big state in lambdas, having dependency on original collection (essentially, a view), etc. We’ve seen a lot of errors caused by this in both Kotlin (when operations were lazy in early days) and in C#. Given that most collections are really short, and benchmarking typical operations in a lazy and snapshot manner, we decided to go with non-lazy operations for normal collections, and using lazy for
Sequence
which you always explicitly create with
asSequence
, etc.