【问题标题】:Is it possible to compile javascript engine(like spidermonkey) and run on Webassembly?是否可以编译 javascript 引擎(如 spidermonkey)并在 Webassembly 上运行?
【发布时间】:2018-12-13 11:05:42
【问题描述】:

我猜这个过程会有一些问题。

你觉得安全稳定吗?

【问题讨论】:

  • 但是为什么呢? WebAssembly 已经在 J​​S 引擎上运行。
  • 需要在 WebAssembly 上运行自定义 JS 脚本引擎。
  • 不要试图粗鲁,但如果你问这个问题,它可能会超出你的头脑。
  • 是的。我知道,我刚试过。这并不容易。谢谢。

标签: emscripten spidermonkey


【解决方案1】:

TLDR;这可能是可能的,但不如 Spidermonkey/V8 功能全面和高性能(...还)

来自 Mozilla 的人已经 compiled Python to WebAssembly,那么为什么不使用 JavaScript 呢?但是,WebAssembly 存在一些限制,会对性能产生很大影响。

1。没有(稳定的)线程支持

虽然 JS 环境是单线程的,但 JS 运行时本身不是。现代 JS 引擎利用并行性进行解析、编译、GC 等。WebAssembly 1.0(又名 MVP)不支持线程。 There is WebAssembly Threads proposal 目前 Chrome 和 Firefox Nightly 支持它作为实验性功能并默认禁用。此外,响应Spectre/Meltdown vulnerability,此提案可能需要比预期更多的时间才能稳定。

2。 JIT 是不可能的

WebAssembly 具有用于用户空间内存(堆)的线性内存模型。 JIT 动态地发出优化的机器代码以使其更快。但是,出于安全原因,WebAssembly 不允许从内存中写入和执行指令。

同样的事情也发生在 iOS 上。 Apple 阻止从内存中执行本机代码so custom JS engines cannot have JIT on iOS

结论

如果您正在考虑在 WebAssembly 上编译和运行 JS 引擎,我建议您尝试轻量级 JS 引擎,例如 JerryScriptEspruino。这些目标是在单核和内存受限的嵌入式系统上运行 JS。它们的构建问题可能比 Spidermonkey/V8 少。

无论如何,不​​要指望到 2018 年会有什么稳定的事情。

【讨论】:

  • 完美答案。非常感谢。
猜你喜欢
  • 2012-03-13
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2019-10-06
  • 2020-08-09
  • 1970-01-01
  • 2012-08-29
相关资源
最近更新 更多