了解Emscripten / ASM.js和浏览器沙箱

时间:2016-09-05 07:31:07

标签: javascript asm.js transpiler

对不起这里的基本问题。我试图围绕Emscripten,ASM.js,并将低级语言编译为javascript。

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

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

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

1 个答案:

答案 0 :(得分:2)

检查Emscripten docs。例如,它说:

  

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

     

但是,由于JavaScript的事件驱动性,最持久   存储选项仅提供异步接口。 Emscripten提供   多个文件系统,可以使用FS.mount()挂载以帮助处理   持久性取决于执行上下文。

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

  

MEMFS

     

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

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