0

通过转换 .wasm 源文件或使用 Javascript 与合适的调试器交互,应该可以序列化完整的 Wasm 执行状态(主要是堆栈、调用帧、局部变量等)。

我想知道是否可以使用这种序列化表示来重建它并继续运行在另一台机器上停止的程序。

当前的浏览器运行时可以支持这个吗?

4

1 回答 1

1

不确定您想到的是什么转换或调试器,但您认为可以序列化 JavaScript 执行状态的前提是错误的。事实上,在浏览器引擎中实现这样的机制是极其困难的。我所知道的生产 JS 引擎在一般情况下甚至都无法序列化其堆(尽管有些引擎,如 V8,对启动堆的快照机制非常有限)。更不用说调用堆栈和实时函数状态了,它们可能处于许多优化模式中的一种,任意与来自运行时或嵌入器的 C 或汇编堆栈帧混合在一起,而且通常非常棘手。

您想到的机械化将需要在一流的无限延续之上进行一般序列化。JavaScript 委员会 TC39 多年前放弃了向该语言添加完整延续的想法,因为它被认为在大多数引擎中实现起来太难且太昂贵(这就是为什么 ES6 转而引入生成器作为一种更有限的机制) . 编辑:甚至从未考虑过通用序列化,因为它实际上会通过闭包或代理破坏封装,从而破坏语言的所有现有安全模式。

于 2018-07-11T18:24:37.977 回答