The new, new phobos sneak preview
Daniel Keep
daniel.keep.lists at gmail.com
Mon Apr 13 18:30:59 PDT 2009
Andrei Alexandrescu wrote:
> Daniel Keep wrote:
>> ...
>
> So essentially we're looking at a symbolic approach - a resumable range
> would need to advertise that. I've used that for isSorted too, and it
> works pretty well.
>
> The remaining question is one of defaults - are most ranges resumable or
> not? I.e., should a range advertise explicitly when it's resumable or
> when it's *not* resumable? I think the safe approach is to go as you
> say: a range ain't resumable unless it explicitly claims to. So if you
> forget stuff, the compiler will remind you.
>
> I'd love to hear more opinions on the topic.
>
>
> Andrei
Actually, I stuffed up the test; I wanted the default to be resumable.
:P That'll teach me to not double-check my logic. A quick truth table
later, and the correct test is this:
> template isResumableRange(R)
> {
> enum bool isResumableRange = isInputRange!(R)
> && (!is(typeof(R.isResumableRange))
> || (is(typeof(R.isResumableRange)) && R.isResumableRange))
> && is(typeof(
> {
> R r1;
> R r2 = r1;
> }()));
> }
... I think. :P
Actually, I've been thinking and I realised that in 95% of cases, you
can assume a range is resumable if it has no references. If it has no
references, the only way the range can be non-resumable is if the
advance member uses the range's state as an argument to some global
method. An example might be a Range that statically accesses Stdout
instead of taking it as an argument.
It's a real shame the range interface doesn't support this:
> struct R
> {
> ...
> pure R advance();
> }
If it did, we could prove a range was resumable if advance was pure and
R has no mutable or const references.
Honestly, I think the safest option is to *require* resuming to be
explicitly stated by the programmer. It'd be nice if we could
automatically account for some cases, but I can't think of any you
couldn't escape from.
Maybe we should default to non-resumable for now, then re-visit the
issue when we have an idea of how people are using ranges.
-- Daniel
More information about the Digitalmars-d
mailing list