当前位置:  开发笔记 > 编程语言 > 正文

C中的Ruby块/ Java闭包

如何解决《C中的Ruby块/Java闭包》经验,为你挑选了1个好方法。

我一直试图理解Ruby阻塞是如何工作的,为此我一直在尝试用C语言实现它们.

实现闭包的一种简单方法是void*将封闭堆栈传递给闭包/函数,但Ruby块似乎也处理来自使用块的作用域的返回和中断语句.

loop do
  break i if (i >= 4000)
  i *= 2
end

我认为Java的一个闭包提案也是这样的.

那么,你将如何在C中实现Ruby-blocks/Java-closures?



1> wvdschel..:

闭包的概念需要上下文的概念.C的上下文基于堆栈和CPU的寄存器,因此要创建块/闭包,您需要能够以正确(和可重入)的方式操作堆栈指针,并根据需要存储/恢复寄存器.

解释器或虚拟机完成此操作的方法是使用context结构或类似的东西,而不是直接使用堆栈和寄存器.如果您正在设计基于寄存器的VM,则此结构会跟踪堆栈和可选的一些寄存器.至少,这是最简单的方法(尽管性能略低于实际正确映射事物).

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有