Lots of low hanging fruit in Phobos
bearophile
bearophileHUGS at lycos.com
Fri Mar 7 18:39:01 PST 2014
Adam D. Ruppe:
> struct query {
> private Result result;
> this(string q) {
> result = c_query(toStringz(q));
> if(!empty) popFront();
> }
>
> Row front;
> @property bool empty() { return HasRow(result); }
> void popFront() in { assert(!empty); } body {
> front = GetNextRow(result);
> }
> }
>
>
> It is certainly a bit longer, but it isn't that bad, and is
> easily extended to other range capabilities.
Your code is badly formatted.
> Translating recursive iteration to a range does take a bit
> more, you need to track your local variables and put them in a
> stack of your own, but even that isn't too hard (though a bit
> wordier).
In generally this is rather bad, unless you are a C programmer
used to use tweezers and needles to implement your own hash set
every other day :-(
> I guess the whole yield thing can be kinda nice, I'm just not
> sure it is that big of a win given its other limitations
> compared to full ranges.
yield is limited, but in a large amount of cases it's enough,
especially if it's well implemented (now Python 3 has yield that
is usable for coroutines too, and it has recently added another
optimization). For the other cases you can use normal range
protocols as you have done.
Bye,
bearophile
More information about the Digitalmars-d
mailing list