问题标签 [continuations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
424 浏览

jquery - 延续式编程是否容易发生堆栈溢出

在回答这个关于 jQuery 效果的问题时,我考虑过callback使用.fadeIn( 500, my_function ).

虽然原则上这是一个可行的想法,但我不知道(如果允许回调递归,jQuery 文档也没有 :( ):

0 投票
3 回答
448 浏览

scheme - 方案中的“堆栈”。是什么让它特别?

在阅读了关于 Scheme 的内容后,我发现了这个声明。

“方案相当于激活堆栈实际上是一个部分延续链(暂停记录)。”

我对这实际上意味着什么有点困惑。方案堆栈与 C 的区别是什么?

0 投票
2 回答
5517 浏览

haskell - Haskell 中的 Goto:谁能解释这种看似疯狂的 continuation monad 使用效果?

这个线程 (Control.Monad.Cont fun, 2005),Tomasz Zielonka 引入了一个函数(Thomas Jäger 以清晰而优美的方式评论)。Tomasz 接受 callCC 主体的参数(一个函数)并将其返回以供以后使用,具有以下两个定义:

Haskellwiki中也提到了这些。使用它们,您可以类似于 haskell 中的 goto 语义,看起来非常酷:

这将打印数字 0 到 10。

有趣的地方来了。我将它与 Writer Monad 一起使用来解决某个问题。我的代码如下所示:

当您编译并运行此代码时,输​​出为:

数字 0 到 3 在这个例子的深邃黑暗中被吞没了。

现在,在“Real World Haskell”中,奥沙利文、戈尔岑和斯图尔特状态

“堆叠 monad 转换器类似于组合函数。如果我们改变应用函数的顺序,然后得到不同的结果,我们不会感到惊讶。monad 转换器也是如此。” (真实世界的 Haskell,2008 年,第 442 页)

我想出了交换上面的变压器的想法:

但是,这不会编译,因为在 Control.Monad.Cont 中没有 MonadWriter 的实例定义(这就是我最近问这个问题的原因。)

我们添加一个实例,离开监听并传递未定义:

添加这些行,编译并运行。所有数字都打印出来。

前面的例子发生了什么?

0 投票
3 回答
778 浏览

javascript - Rhino 是唯一支持沙盒和可序列化延续的解释器吗?

我需要(a)沙盒和(b)可序列化的延续。我正在向用户公开服务器端游戏脚本,并且它非常异步,因此回调模式使代码不可读并且对于新手程序员来说非常难以接近。延续传递风格是一种替代方案,但具有相同的缺点。异步是指对用户的查询可能需要数月才能完成。

有关我的完整列表,请参见http://weaverengine.com/platforms

可序列化的延续似乎是一个非常优雅的解决方案,但很少有解释器支持它们。

到目前为止,似乎我唯一的选择是犀牛。我希望NodeJS或 PyPy 可以工作,但到目前为止的证据表明相反。

Lua 似乎支持 coroutines,但我找不到任何关于它是否支持可序列化延续的信息。Lua 在沙盒方面做​​得很好。

NodeJSJefe提供了非常好的沙盒,但目前还没有关于 continuation serialization的内容。

根据我在 pypy-dev 邮件列表中的理解,PyPy 还没有完善他们的沙盒和可序列化的延续支持到可以一起使用的程度。

JavaFlow 提示如果所有类都实现 Serializeable,那么 Java 延续可以被序列化。但是除非我可以在 JavaFlow 之上运行一个很好的动态语言的解释器,否则我不感兴趣。

Java 和 Rhino 是我唯一的选择吗?

是否有具有延续支持的 NodeJS 分支?任何符合这些标准的相当不错的动态语言?

0 投票
1 回答
1618 浏览

serialization - 实际使用 Lua 协程/延续序列化来简化异步逻辑?

LuaPluto 库声称能够序列化 Lua 协程。我将其解释为“可序列化的延续”,这是使异步编程以同步风格可写的一个重要特征。

例如,工作流可以线性表示,而不需要命名入口点

代替

虽然将 if 语句翻译成以前的样式还不错,但一旦涉及局部变量、循环、嵌套函数调用等,事情就会变得非常复杂。

这就是可序列化的延续变得至关重要的地方。

序列化延续用于 JavaFlow、Cocoon (Rhink)、Seaside、PLT Scheme、SICS,非常适合处理业务工作流、医疗诊断和(在我的情况下)文本冒险游戏。

有没有 Lua 和 Pluto 以这种方式利用它们的功能的示例(希望是开源的!),使用延续来简化异步环境中的逻辑?

0 投票
5 回答
442 浏览

scheme - 我似乎无法在 Scheme 中全神贯注于 call/cc

有人对它的工作原理有很好的指导吗?带有视觉辅助的东西会很好,我遇到的每一个指南似乎都在说同样的事情,我需要重新审视它。

0 投票
2 回答
1174 浏览

scala - Scala:声明类型为 Any => Nothing 的延续时出现编译错误

此代码给出编译错误:

错误信息:

但是这段代码按预期工作:

问题是:为什么 Scala 编译器讨厌类型 Any => Nothing 的延续?

0 投票
1 回答
117 浏览

programming-languages - 除了堆栈之外,是否有任何编程语言可以继续恢复堆?

我熟悉的支持延续的语言(Scheme 和 Ruby)从创建延续时恢复堆栈状态和指令指针。我想知道是否有任何编程语言调用延续也会恢复堆?

[编辑:] 除了我接受的 Marcelo 的回答之外,我还发现了一个支持“商店”概念的 ML 扩展,这实际上就是我所描述的。请参阅 Greg Morrisett 的论文Refining First Class Stores

0 投票
1 回答
201 浏览

functional-programming - 继续记录 PC 和寄存器状态吗?

目前,我在函数式语言中试验continuation的时候,我的理解是一个continuation记录了当前的程序计数器和寄存器文件,当一个continuation返回时,PC和注册的文件就会恢复到它记录的值.

因此,在以下来自Might 博客文章的愚蠢示例中,

我不确定我的理解是否正确..如果您认为不正确,请纠正我....

0 投票
3 回答
1039 浏览

iterator - 这个 Scheme 列表迭代器如何使用 call-with-current-continuation?

我正在尝试阅读此代码:

谁能解释call-with-current-continuation这个例子中的工作原理?

谢谢