SyMind / learning

路漫漫其修远兮,吾将上下而求索。
10 stars 1 forks source link

编译 Python 为 WebAssembly #44

Open SyMind opened 2 years ago

SyMind commented 2 years ago

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 SwallowPyPy 的几次尝试都证明了这一点。

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