Open SyMind opened 2 years ago
Why create a new standard when there is already asm.js? What is the difference between asm.js and web assembly? Why WebAssembly is Faster Than asm.js
概括一下 WebAssembly:
因此,目前 WebAssembly 是对 asm.js 的迭代,目标仅为 C/C++ 等类似语言。
Python 代码编译为 WebAssembly/asm.js 的唯一阻碍不只是 GC。WebAssembly/asm.js 都是低级的静态类型代码,无法完全表达 Python 代码。WebAssembly/asm.js 当前的工具链基于 LLVM,可以编译为 LLVM IR 的语言就可以转换为 WebAssembly/asm.js。但遗憾的是,Python 太过动态,无法融入其中,Unladen Swallow 和 PyPy 的几次尝试都证明了这一点。
asm.js 的演示文稿中有关于动态语言状态的幻灯片。这意味着目前只能将整个 VM(C/C++ 的实现)编译到 WebAssembly/asm。js和解释(如果可能,使用JIT)原始源。对于Python,有几个现有项目:
目前,如果您正在构建一个传统的网站或web应用程序,其中下载数兆字节的JS文件几乎不是一个选项,那么看看Python-to-JavaScript转换器(例如Transcrypt)或JavaScript Python实现(例如Brython)。或者与编译为JavaScript的语言列表中的其他语言一起试试运气。
否则,如果下载大小不是问题,并且您已经准备好处理许多粗糙的边缘,请在以上三个选项中选择一个。
https://stackoverflow.com/questions/44761748/compiling-python-to-webassembly
WebAssembly 与asm.js 的区别
Why create a new standard when there is already asm.js? What is the difference between asm.js and web assembly? Why WebAssembly is Faster Than asm.js
概括一下 WebAssembly:
因此,目前 WebAssembly 是对 asm.js 的迭代,目标仅为 C/C++ 等类似语言。
在 Web 中执行 Python
Python 代码编译为 WebAssembly/asm.js 的唯一阻碍不只是 GC。WebAssembly/asm.js 都是低级的静态类型代码,无法完全表达 Python 代码。WebAssembly/asm.js 当前的工具链基于 LLVM,可以编译为 LLVM IR 的语言就可以转换为 WebAssembly/asm.js。但遗憾的是,Python 太过动态,无法融入其中,Unladen Swallow 和 PyPy 的几次尝试都证明了这一点。
asm.js 的演示文稿中有关于动态语言状态的幻灯片。这意味着目前只能将整个 VM(C/C++ 的实现)编译到 WebAssembly/asm。js和解释(如果可能,使用JIT)原始源。对于Python,有几个现有项目:
解决方案
目前,如果您正在构建一个传统的网站或web应用程序,其中下载数兆字节的JS文件几乎不是一个选项,那么看看Python-to-JavaScript转换器(例如Transcrypt)或JavaScript Python实现(例如Brython)。或者与编译为JavaScript的语言列表中的其他语言一起试试运气。
否则,如果下载大小不是问题,并且您已经准备好处理许多粗糙的边缘,请在以上三个选项中选择一个。
参考
https://stackoverflow.com/questions/44761748/compiling-python-to-webassembly