使用 asm.js 将依赖于外部库的代码转换为 javascript
Posted
技术标签:
【中文标题】使用 asm.js 将依赖于外部库的代码转换为 javascript【英文标题】:Using asm.js to convert external-library-dependent code to javascript 【发布时间】:2017-04-28 09:06:33 【问题描述】:(请注意,我仍然对 asm.js 的工作原理以及它可以“自动转换”的软件类型感到困惑,而且我仍然对从原始源自动转换堆栈中的许多术语感到困惑。 如果您觉得有必要投反对票,请善待并提出建设性意见。)
如何使用 asm.js 转换依赖于多个外部库运行的代码?
在如此复杂的依赖情况下,您将 emscripten 应用于什么?
是否有某些类别的基于 c 的软件无法使用?
例如 - pix2pix
好像因为pix2pix是基于Torch,最终使用llvm,所以这个asm.js好像可以转换吧?
【问题讨论】:
【参考方案1】:简而言之,emscripten 将 llvm 代码(由 C++ 代码生成,但理论上可以是 llvm 支持的任何语言)并将其转换为 javascript。您可以在其论文here
中详细了解它由此可见,它需要C++源代码编译成js。
那么 C++ 标准库呢? Emscripten 有一些 C++ 库函数的端口。你有 fileSystem 仿真(仿真是因为浏览器不允许 fs 访问 js 代码。但是在 nodejs 的情况下它可以工作),容器的实现,算法等。 不支持线程,因为它是 js 不直接支持的功能(特别是在生产浏览器中)
这也应该清楚地表明任何依赖于平台的代码都将不起作用(除非您也有源代码形式。)。
例如 pix2pix 似乎正在使用 NVIDIA CUDA 库以便能够在 GPU 上运行。这是由 NVIDIA 通过特定于平台的驱动程序提供的,因此无法将其转换为 emscripten。 但是如果这个库的核心逻辑可以独立于平台代码,并且它所依赖的每个库都可以源代码形式提供,那么创建 pix2pix 的 asm.js 端口应该是可能的。
【讨论】:
以上是关于使用 asm.js 将依赖于外部库的代码转换为 javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有外部库的任何lua中将双精度转换为小字符串表示而不会丢失数据?