On 2012-07-27 09:42, Nick Sabalausky wrote:

I wonder how that works under the hood. Like, if it's somewhat similar
to opApply. Or maybe more like an Asm-style "messin' with the call
stack's return addresses". I would hope it wouldn't involve fiber
context switches, unless they're somehow much faster than D fiber
context switches (which would seem weird, being in a VM).

I have no idea. But Ruby uses a similar approach:

def foo
  yield 1
  yield 2
  yield 3
end

foo do |e|
  puts e
end

Results in:

1
2
3

But in Ruby that's basically syntax sugar for:

def foo (&block)
  block.call(1)
  block.call(1)
  block.call(1)
end

Which in D would be the same as:

void foo (void delegate (int) dg)
{
    dg(1);
    dg(2);
    dg(3);
}

foo((e){
    writeln(e);
});

Which is basically how opApply works.

--
/Jacob Carlborg

Reply via email to