Hi internals, > > > So I'm probably changing this to `ImmutableTraversable` as a short name > > > for the functionality, > > > to make it clear arguments are eagerly evaluated when it is created. > > > (ImmutableSequence may be expected to only contain values, and would be > > > confused with the ds PECL's > > > https://www.php.net/manual/en/class.ds-sequence.php) > > > > Hello, > > > > And why not simply RewindableIterator ? Isn't it the prominent feature > > of it ? > > > > Agreed it's immutable, but a lot of traversable could be as well. > > All iterators are "rewindable", though of course not in practice. I > would avoid such names because we may eventually add an interface > which works as a "tag" to say "yes, I actually do support rewinding." > > The property of being rewindable comes from it being cached. Maybe > `CachedAggregate`? Aggregates are data structures from which an > external iterator can be obtained, so it makes a bit more sense if > it's eager.
I think CachedAggregate would have problems with an unclear meaning similar to those that were raised previously in https://externals.io/message/114819#114798 (Some developers would think it may refer to the act of lazily evaluating the iterable(caching it on-demand to access later)) https://en.wikipedia.org/wiki/Aggregate on its own refers to a collection of objects/values or in other contexts, functions such as count/sum/min/max https://en.wikipedia.org/wiki/Aggregate_function - In other contexts such as set theory, there might not be keys associated with the values so aggregate on its own seems unclear. ImmutableIteratorAggregate or just ImmutableIterable/ImmutableTraversable makes more sense than `Cached*` to me. ImmutableKeyValueSequence is an even shorter name than ImmutableIteratorAggregate and describes what the data structure is. Thanks, Tysosn -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php