如果用 C 编写,WebAssembly 运行 会比 Python 更快吗?
Does WebAssembly run faster if written in C as opposed to Python?
有一长串可以编译成 Wasm 的语言。在 Python 上用 C 或 Rust 之类的东西编写是否有任何性能提升?还是因为它被编译为 Wasm 而完全一样?
编译为 WebAssembly 基本上只是模拟一种针对虚拟硬件的特殊形式的程序集。当您将 "can compile language X" 读入 Wasm 时,并不总是意味着该语言直接编译为 Wasm。在 Python 的情况下,据我所知,它意味着 "they compiled Python interpreters to Wasm" (例如 CPython,PyPy),所以整个 Python 解释器是 Wasm,但它仍然解释 Python 通常源代码文件,它不会将它们转换为特殊的 Wasm 模块或任何东西。这意味着 Python 解释器的所有开销都在那里,在 Wasm 引擎等的开销之上
所以是的,C 和 Rust(可以通过换出编译器后端直接以 Wasm 为目标)仍然 运行 比以 CPython 编译为 Wasm 的 Python 代码快,出于同样的原因。在 运行 本机时加速 Python 的工具(例如 Cython、原始 C[=17=] C 扩展等)也可以在 Wasm 中使用以获得相同的加速,但它不是免费的"Compile slow interpreted language to Wasm and become fast compiled language";计算机还没有那么聪明。
简短回答:是的,因为 Python 语言本身没有编译为 Wasm,而是它的解释器。
说 Python 支持 Wasm 并不总是意味着相同。首先,Python 不是编译语言,它是脚本语言。不要指望脚本语言会被编译成本地(或 Wasm)语言,因为它不是那样工作的。
那Python如何支持Wasm呢? Python interpreters/runtimes 像cpython,用C写的,编译成Wasm。有两个流行的Python 运行时间支持Python:pyodide and Wasm port for micropython(除了在浏览器中运行 Python还有很多努力他们俩)。它们都是解释器,将 Python 翻译成自己的字节码,然后在 Wasm 中执行字节码。当然会像原生环境下的cpython一样会有巨大的性能损失
有一长串可以编译成 Wasm 的语言。在 Python 上用 C 或 Rust 之类的东西编写是否有任何性能提升?还是因为它被编译为 Wasm 而完全一样?
编译为 WebAssembly 基本上只是模拟一种针对虚拟硬件的特殊形式的程序集。当您将 "can compile language X" 读入 Wasm 时,并不总是意味着该语言直接编译为 Wasm。在 Python 的情况下,据我所知,它意味着 "they compiled Python interpreters to Wasm" (例如 CPython,PyPy),所以整个 Python 解释器是 Wasm,但它仍然解释 Python 通常源代码文件,它不会将它们转换为特殊的 Wasm 模块或任何东西。这意味着 Python 解释器的所有开销都在那里,在 Wasm 引擎等的开销之上
所以是的,C 和 Rust(可以通过换出编译器后端直接以 Wasm 为目标)仍然 运行 比以 CPython 编译为 Wasm 的 Python 代码快,出于同样的原因。在 运行 本机时加速 Python 的工具(例如 Cython、原始 C[=17=] C 扩展等)也可以在 Wasm 中使用以获得相同的加速,但它不是免费的"Compile slow interpreted language to Wasm and become fast compiled language";计算机还没有那么聪明。
简短回答:是的,因为 Python 语言本身没有编译为 Wasm,而是它的解释器。
说 Python 支持 Wasm 并不总是意味着相同。首先,Python 不是编译语言,它是脚本语言。不要指望脚本语言会被编译成本地(或 Wasm)语言,因为它不是那样工作的。
那Python如何支持Wasm呢? Python interpreters/runtimes 像cpython,用C写的,编译成Wasm。有两个流行的Python 运行时间支持Python:pyodide and Wasm port for micropython(除了在浏览器中运行 Python还有很多努力他们俩)。它们都是解释器,将 Python 翻译成自己的字节码,然后在 Wasm 中执行字节码。当然会像原生环境下的cpython一样会有巨大的性能损失