Transience of .front in input vs. forward ranges
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sun Nov 4 05:55:48 PST 2012
On 11/3/12 9:02 PM, Jonathan M Davis wrote:
> Andrei seems to think that algorithms should consider input ranges' fronts to
> be transient, and that forward ranges and greater shouldn't have transient
> fronts. And I don't think that he's said much about it after that (probably
> mostly because he was out of town and unable to communicate on the newsgroup
> much for a while). However, I think that he's the only one in this thread who
> had come to that conclusion. Most of the rest of us agree that transience
> isn't necessarily related to the type of range at all. And I think that most
> everyone has considered ranges like ByLine and ByChunk to be bizarre and
> abnormal and not something that normal algorithms need to worry about (and if
> anything that ByLine and ByChunk should be changed to be non-transient or to
> not be ranges at all).
(Let's drop the argumentum ad populum part and focus on the technical
argument.)
These ranges are the only ones dealing with streaming input - the only
veritable input ranges, so qualifying them as bizarre would pretty much
raise the point that input ranges are bizarre.
An input range means that you're fetching an item, looking at it, and
discard it. Transience is, in my opinion, quite intrinsic to input
ranges. It is also a well understood fact that copying a char[] does not
guarantee its contents are copied, in any API. So just by seeing as
ByLine is an input range of char[], its properties are self-evident. If
it were an input range of string, it would have other properties,
equally self-evident. This destroys the argument that transience is
unrelated to the range type and kind.
> If we're going to support transient fronts, then we need a solid plan for
> doing so. Even if it's the case that we're ultimately going to go with input
> ranges' fronts being considered transient, and all other ranges' fronts being
> considered non-transient, we need that to be clear and be made explicitly
> clear in the docs. It's definitely not how things are treated right now.
I think indeed input ranges should offer no more guarantees about the
transiency of their .front as any other APIs offering the same type.
Invoking .popFront for an input range means the current element buffered
is discarded and replaced with the next one.
Requiring anything more would put undue pressure on any actual input
range implementations and would essentially make the entire range
infrastructure unusable efficiently with streaming.
For ByLine we should add another range that automatically produces
strings - either ByLineStrings or ByLine!string.
Andrei
More information about the Digitalmars-d
mailing list