<p>I've been trying to understand how Ruby blocks work, and to do that I've been trying to implement them in C.</p>

<p>One easy way to implement closures is to pass a <code>void*</code> to the enclosing stack to the closure/function but Ruby blocks also seem to handle returns and break statements from the scope that uses the block.</p>

<pre><code>loop do
  break i if (i &gt;= 4000)
  i *= 2
end
</code></pre>

<p>I think one of the closures proposals for Java works like this also.</p>

<p>So, how would you implement Ruby-blocks/Java-closures in C?</p>

The concept of closures requires the concept of contexts. C's context is based on the stack and the registers of the CPU, so to create a block/closure, you need to be able to manipulate the stack pointer in a correct (and reentrant) way, and store/restore registers as needed.
The way this is done by interpreters or virtual machines is to have a
```
context
```
structure or something similar, and not use the stack and registers directly. This structure keeps track of a stack and optionally some registers, if you're designing a register based VM. At least, that's the simplest way to do it (though slightly less performant than actually mapping things correctly).