Spliterator flags as enum (was Initial java.util.Spliterator putback)
Doug Lea
dl at cs.oswego.edu
Thu Mar 28 12:06:17 PDT 2013
On 03/28/13 14:52, Joshua Bloch wrote:
> Doug,
>
> I don't get it. You can set and unset flags on your own EnumSet. Why isn't that
> sufficient?
There are a lot of problems. First, even
though most spliterators will return the same set of
characteristics each time, you can't just create one static one:
class MySpliterator { ...
static final EnumSet<Characteristics> cs = EnumSet.of(...);
EnumSet<Characteristics> characteristics() return cs; }
}
... because you cannot risk that no one will modify.
Second, when inside streams, you'd have to create a new EnumSet
Object across each stage, that somehow secretly extends the
public Characteristics with non-public internal control flags.
Which means either some slow conversion table or grabbing
private EnumSet internals.
So it is both slow and painful. I tried to make it less so,
knowing that people sometimes react hostilely to plain bit
sets. But I'm sure that the current scheme is better than all
I tried. (Ditto for Brian Goetz and Paul Sandoz).
In fact, I think the current scheme is sorta nice in
an absolute sense.
-Doug
>
>
> Josh
>
> On Thu, Mar 28, 2013 at 11:45 AM, Doug Lea <dl at cs.oswego.edu
> <mailto:dl at cs.oswego.edu>> wrote:
>
> On 03/28/13 13:18, Tim Peierls wrote:
>
> I can't find a discussion of why Spliterator flags are ints rather than
> enum.
>
>
> We started out with enums on (my) initial Spliterator side vs
> control flags internal to streams. The we had to somehow
> mesh these to work together. On the stream side, you need
> to set and unset various bits across stages. Clearly
> you can't do that to someone's EnumSet -- they will not expect
> you to modify it, but enforcing this makes it both unwieldy and
> sleaze-inducing (we'd have to grab underlying representation from
> EnumSet).
>
> Another way of saying this is that we needed an efficient
> propagate-by-value small-N bit set mechanism, and the only candidate
> was the traditional one. This amounts to the same reason
> that nio "interest" flags are done the same way.
>
> -Doug
>
>
>
>
>
>
More information about the lambda-libs-spec-experts
mailing list