协程实现的CPS编译器

Rai*_*ine 6 .net compiler-construction continuations lua coroutine

我以前在业余时间在IronLua工作.Lexing和解析目前已完成.由于在.NET中实现Lua协同程序而不采用脏的线程攻击并不容易,我有点因为沮丧而停止工作.这与编译Lua函数的方式有关,这是我在设计编译器时需要尽早解决的问题.

我一直在研究协程实现,结果证明我对连续性的初步感觉是正确的.

由于协程创建,yield和其他操作不是语言关键字,而是"coroutine"表中的函数,我不能静态切换到CPS样式的编译,因为协程表可能已被前一个脚本覆盖.虽然我知道覆盖coroutine表的脚本很少见,但我希望能够安全地尽可能干净地处理问题.

我的计划是对每个表达都使用延续传递样式,无论我们是否在协程中.一切都会延续下去.

除了首先编写编译器的明显困难,并在其上添加CPS转换之外,我对此设计决策及其性能影响感到不安.

我正在寻找有关.NET中Lua协程实现的建议.

谢谢你的时间.

Mat*_*ell 0

您可能想更多地了解 Scala 在 .NET 上所做的工作。Scala 支持延续作为编译器插件。

警告:我不知道 .NET 中的延续支持是否有效,或者编译器本身的工作有多先进。负责人是 Miguel Garcia,你可以在 Scala Lang 上找到他的地址:The Scala Development Team

以下参考资料可能有用:

Scala 来到 .Net

Scala 编译器角,面向 .NET 和 Mono 粉丝