在JavaScript中使用continuations的库/编译器
我正在寻找一个JavaScript库/编译器,它允许开发人员使用类似Scheme(或Rhino)中的continuation。例如,此库应允许我们执行以下类似操作:在JavaScript中使用continuations的库/编译器,javascript,continuations,Javascript,Continuations,我正在寻找一个JavaScript库/编译器,它允许开发人员使用类似Scheme(或Rhino)中的continuation。例如,此库应允许我们执行以下类似操作: var kont; function add(x,y) { return x + (function() {kont = new Continuation(); return y;})(); } var executed = false; //avoiding infinite recursion show(
var kont;
function add(x,y) {
return x +
(function() {kont = new Continuation(); return y;})();
}
var executed = false; //avoiding infinite recursion
show(add(5,1)); //show 6
if (!executed) {
executed = true;
kont(20); // show 25 because the "y" binding is changed
}
var result = cont(20);
这段代码背后的要点是:a)捕获和b)恢复JavaScript脚本的控制流(或执行)。为了恢复执行,我假设“capture”应该是一个像“kont=newcontinuation()”这样的一级值
我搜索了库,但只找到了jwacs(),但这个项目已经停止。遗憾的是,Babel()不支持它:(
有什么帮助吗?我想您可能需要的是babel支持的发电机:
要在各种各样的JavaScript实现上实现这一点,底层实现必须能够生成一个作为工件的延续。你不能用一个使用现有标准JavaScript功能的库来伪造这一点。那么,你为什么希望它存在呢?嗯,如果你使用transpiler(源到源编译器),你可以这样做。所以,你可能会发现一个库使用transpiler来引入continuations。一个“transpiler”必须使用目标语言原语来实现它可能拥有的任何概念。解释如果目标语言无法捕获执行状态,它如何实现延续?将代码转换为延续传递样式(CPS)并捕获“k”值(函数(…k))?您好,我认为生成器不允许挂起/停止计算或将计算与另一计算交换。例如,使用continuations,您可以将当前计算替换为“空”continuation(即计算),从而停止程序的执行。