Characterizing stream operation (original) (raw)
Remi Forax forax at univ-mlv.fr
Fri Feb 15 15:46:08 PST 2013
- Previous message: Characterizing stream operation
- Next message: forEachUntil
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 to Stream), 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
- Previous message: Characterizing stream operation
- Next message: forEachUntil
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the lambda-libs-spec-observers mailing list