Are iterators and ranges going to co-exist?
Steven Schveighoffer
schveiguy at yahoo.com
Mon Jul 26 05:45:29 PDT 2010
On Sat, 24 Jul 2010 09:01:14 -0400, Jim Balter <Jim at balter.name> wrote:
>
> "Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message
> news:op.vf5kynqgeav7ka at localhost.localdomain...
>> On Tue, 20 Jul 2010 09:52:00 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> On 07/20/2010 03:01 AM, Peter Alexander wrote:
>>>> Some more arguments for iterators/cursors:
>>>>
>>>> 1. How would you implement Floyd's cycle finding algorithm using
>>>> ranges?
>>>> (http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare)
>>>> It uses two iterators over the same range. You would have to
>>>> wastefully
>>>> use 2 ranges that have the same end coordinate.
>>>
>>> I think there's a confusion somewhere. You may want to check out the
>>> SList definition in std.algorithm. A SList range is exactly one
>>> pointer thick. With singly-linked lists it's the iterator approach
>>> that is wasteful because it canonically transports a null pointer as
>>> end().
>>
>> That is an example of a single exception to the rule :) AFAIK, no
>> other container types have ranges with no end pointer or length.
>
> zstrings, pipes, and various other streams.
Streams are in a completely different category. They are not containers.
I personally feel that imposing the range/iterator/cursor idiom on top of
a stream is a problematic model that's only done "because you can." Kind
of like the one-liner qsort in a functional language.
> Various calculated numeric series.
Those don't have ends afaik, and are read-only. Take works perfectly fine
in those cases where you need "n elements", in which case you have an end
point ;)
> Ropes and other binary trees (threaded trees can be traversed with a
> single pointer and no stack).
I'm not familiar with the internal structure of Ropes.
Look, technically, any node-based container can have a single-pointer
range, but it leaves you with only one type of range -- one that goes to
the end. That doesn't sound very useful to me.
> Probably other classses of containers. And while SLists are "so (sic)
> unique",
I meant 'so'
> very large amounts of very sophisticated code have been written using
> just that "limited" datatype.
No, SList is brand new, not much code has been written with it ;) You may
object, but try using it and see how far it takes you. SList is like a
normal singly linked-list but with all the power removed for safety
reasons.
-Steve
More information about the Digitalmars-d
mailing list