Bikeshed: Spliterator "fail-fast"
Remi Forax
forax at univ-mlv.fr
Tue Jul 9 16:02:54 PDT 2013
On 07/08/2013 04:10 AM, David Holmes wrote:
> Hi Paul,
>
> On 1/07/2013 11:46 PM, Paul Sandoz wrote:
>> Hi,
>>
>> The Spliterator doc states:
>>
>> * <p><a name="binding"/>A Spliterator that does not report {@code
>> IMMUTABLE} or
>> * {@code CONCURRENT} is expected to have a documented policy
>> concerning:
>> * when the spliterator <em>binds</em> to the element source; and
>> detection of
>> * structural interference of the element source detected after
>> binding.
>> ...
>> * After binding a Spliterator should, on a best-effort basis, throw
>> * {@link ConcurrentModificationException} if structural
>> interference is
>> * detected. Spliterators that do this are called <em>fail-fast</em>.
>>
>> As Mike pointed out to me "fail-fast" is not accurate since the
>> implementations for bulk traversal, specifically forEachRemaining,
>> can throw a CME after traversal has completed.
>>
>> - fail-finally
>> - fail-ultimately
>> - fail-eventually
>>
>> ?
>
> Nothing. It is either fail-fast or else you don't say anything.
>
> Any definition of fail-fast for Spliterator should be consistent with
> that of Iterator.
>
> David
David, I agree with you, two semantics is too complex here.
Anyway, playing the devil advocate, most implementation of Iterator are
not as fail-fast
as they could, they don't check the collection modification in hasNext()
but only in next().
>
>> Paul.
>>
Rémi
More information about the lambda-libs-spec-experts
mailing list