foreach syntax, std.mixin

Bill Baxter wbaxter at gmail.com
Sun Nov 8 16:36:54 PST 2009


On Sun, Nov 8, 2009 at 1:43 PM, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Philippe Sigaud (philippe.sigaud at gmail.com)'s article
>> > dsimcha wrote:
>> > Makes me wonder why noone thought of this until now, or maybe someone did
>> > and I
>> > forgot.  How's:
>> >
>> > foreach(fooElem, barElem; unpack(zip(foo, bar))) {}, or:
>> >
>> > foreach(i, elem; enumerate(chain(foo, bar))) {} ?
>> >
>> >
>> Can that be done for more than two ranges? The syntax is so nice, I'd be
>> deligthed to have that.
>
> Hot off the press and VERY prototype-ish:
>
> Code:
> http://pastebin.com/m2087e524
>
> Docs:
> http://cis.jhu.edu/~dsimcha/unpackEnumerate.html
>
> Does this look like a good addition to std.range?  The elegance of it is it solves
> the problem of providing syntactic sugar to ranges w/ zero ripple effects either
> in the compiler or in the rest of Phobos.  I'll file it somewhere more official
> after people review it a little and refine the idea, but I definitely think
> something similar to this has a legit place in std.range.
>
> If you're wondering how unpack works and don't want to grovel through all the
> code, it's tons of string mixin magic.  That's about the only way I was able to
> make it work.

What's the overhead like?  That would be the thing that would keep me
from using unpack or enumerate.  As Andrei is fond of saying
"expensive abstractions are a dime a dozen".  If it's not too bad then
this sounds like a decent solution to me.

--bb



More information about the Digitalmars-d mailing list