【问题标题】:Continuations in V8 or another C++ JavaScript interpreterV8 或其他 C++ JavaScript 解释器中的延续
【发布时间】:2015-06-10 11:47:42
【问题描述】:

有没有办法在 V8 中进行延续?如果没有,是否还有其他适用于 C++ 的 JavaScript 引擎可以做到这一点?

我想编写一个使用支持延续的 JavaScript 解释器的应用程序,就像 Rhino does in Java

这主要用于游戏开发,脚本能够“暂停”直到游戏引擎再次对其进行控制(例如,在过场动画之前等待玩家的输入),这一点非常有用(甚至是必不可少的?)恢复其事件链。

V8 听起来是目前用于 C++ 应用程序的最有前途的 JavaScript 引擎,但从我能找到的资源来看,V8 有 no planssupport continuations。不过,这些帖子是 4 到 6 年前发布的,因此它们可能是最新的,也可能不是最新的。

【问题讨论】:

    标签: javascript c++ interpreter v8


    【解决方案1】:

    JavaScript 的新版本 ES6 在生成器的名称下具有类似延续的功能。我相信 V8 现在应​​该支持生成器了。如果没有,你可以使用像 babeljs 这样的 JavaScript 转编译器。

    【讨论】:

    • 我以前从未听说过发电机,但是哇,它们听起来很完美!看起来 V8 现在也支持生成器了,作为一个简单的示例,我在 Chrome 控制台中运行良好。
    • 但是请注意,生成器故意只提供 shallow one-shot 延续。 AFAICT,没有 JS 实现可以给你一般的延续。
    • @AndreasRossberg 说延续很浅是什么意思?您的意思是脚本状态的某些方面在脚本继续执行后不会持续存在?
    • @Josh1billion,浅表示它们仅捕获当前函数(而不是生成器)的延续。换句话说,只是调用堆栈的顶部框架,而不是整个堆栈。
    • @Josh1billion 关于如何使用生成器的实用建议,我建议你看看taskjs.org 的设计(Taskjs 不再与当前的生成器 api 兼容,但同样的通用架构适用)。基本思想是你产生承诺。当 promise 被解决时,主循环会继续执行该函数。
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多