Characterizing stream operation
Remi Forax
forax at univ-mlv.fr
Fri Feb 15 15:46:08 PST 2013
On 02/15/2013 09:04 PM, Brian Goetz wrote:
> We've divided stream operations as follows:
>
> Intermediate operations. Always lazy. Always produce another stream.
>
> Stateful operations. A kind of intermediate operation. Currently
> always transforms to the same stream type (e.g., Stream<T> to
> Stream<T>), though this could conceivably change (we haven't found
> any, though). Must provide their own parallel implementation.
> Parallel pipelines containing stateful operations are implicitly
> "sliced" into segments on stateful operation boundaries, and executed
> in segments.
>
> Terminal operations. The only thing that kicks off stream
> computation. Produces a non-stream result (value or side-effects.)
>
> For each of these, once you perform an operation on a stream
> (intermediate or terminal), the stream is *consumed* and no more
> operations can be performed on that stream. (Not entirely true, as
> the TCK team will almost certainly point out to us eventually; there
> are some ops that are no-ops and probably will succeed unless we add
> consumed checks.)
>
>
> These names are fine from the perspective of the implementation; when
> implementing an operation, you will be implementing one of these three
> types, and conveniently there is a base type for each to subclass.
>
> From the user perspective, though, they may not be as helpful as some
> alternative taxonomies, such as:
>
> - lazy operation -- what we now call intermediate operation
> - stateful lazy operation -- what we now call stateful
> - consuming operation -- what we now call terminal
>
> These are good in that they keep a key characteristic -- when the
> computation happens -- in full view. However, they also create less
> clean boundaries. For example, iterator() is a consuming operation
> from the perspective of the stream, but from the perspective of the
> user, may be thought of as lazy.
>
> Thoughts on how to adjust this naming to be more intuitive to users?
>
lazy and terminal are Ok for me, stateful can be renamed to intermediate
stateful.
Rémi
More information about the lambda-libs-spec-experts
mailing list