0

对不起这里的基本问题。我正在尝试围绕 Emscripten、ASM.js 以及将低级语言编译为 javascript。

这是我不明白的。您可以在原生 C 程序中做一些在基于浏览器的 js 中不能(也不应该)做的事情。例如,在本机应用程序中,您可以访问文件系统或关闭计算机。

假设我编写了一个读取 /etc/passwd 然后关闭计算机的 C 程序。然后,我将该程序编译为 js 并将其弹出到<script>标签中。当我访问带有<script>标签的页面时会发生什么?显然,它不会关闭计算机,但它甚至会编译吗?

在我看来,与低级语言相比,在浏览器中运行的 javascript 是如此有限,以至于我无法看到任何有意义的应用程序可以简单地编译为 js 而不会完全破坏它。

4

1 回答 1

2

检查Emscripten 文档。例如,它说:

使用 Emscripten 编译的应用程序通常需要同步 I/O,因此 Emscripten 本身为文件系统提供了完全同步的接口。

然而,由于 JavaScript 的事件驱动特性,大多数持久存储选项只提供异步接口。Emscripten 提供了多个可以使用 FS.mount() 挂载的文件系统,以帮助根据执行上下文处理持久性。

如果你向下滚动,你会发现:

内存文件系统

这是运行时初始化时安装在 / 的默认文件系统。所有文件都严格存在于内存中,并且在重新加载页面时,写入它们的任何数据都会丢失。

我相信这应该回答你的问题。最终,Emscripten/ASM 将尝试使用基于 JavaScript 的 polyfill 模拟低级细节。

于 2016-09-05T07:41:51.767 回答