有一长串语言可以被编译成Wasm。用类似于C或Rust的语言编写有什么性能上的提高吗?或者是因为它正在被编译成Wasm,所以一切都是一样的?
发布于 2019-12-06 03:25:59
简单回答:是的,因为语言本身不是编译成Wasm,而是它的解释器.。
说Python支持,并不总是意味着相同的意思。首先,Python不是一种编译语言,而是一种脚本语言。不要期望脚本语言会被编译成本机语言(或Wasm)语言,因为它不是这样工作的。
那么Python是如何支持瓦斯的呢?Python解释器/运行时(如用C编写的cpython )被编译为Wasm。有两种流行的Python运行时支持Python:吡啶类和用于micropython的Wasm端口 (除了这两种运行时,在浏览器中运行Python还有很大的努力)。它们都是解释器,将Python翻译成自己的字节码,然后在Wasm中执行字节码。当然,在本机环境中,会出现与cpython一样的巨大性能损失。
发布于 2019-12-06 03:09:49
编译到WebAssembly基本上只是模拟针对虚拟硬件的一种特殊形式的组装。当你读到“可以将X语言编译成Wasm”时,并不总是意味着语言实际上是直接编译成Wasm的。在Python的例子中,据我所知,它意味着“他们将Python解释器编译成Wasm”(例如CPython,PyPy),所以整个Python解释器是Wasm,但是它仍然通常解释Python源代码文件,它不会将它们转换成特殊的Wasm模块或其他什么。这意味着Python解释器的所有开销都在那里,在Wasm引擎的开销之上,等等。
因此,由于同样的原因,C和Rust (它可以通过替换编译器后端来直接针对Wasm )仍然比针对编译到Wasm的CPython代码运行得更快。在本机运行时加快Python速度的工具(例如Cython、原始CPython C扩展等)也可以在Wasm中获得同样的速度,但它不是免费的“将缓慢的解释语言编译成Wasm,并成为快速编译的语言”;计算机还没有那么聪明。
https://stackoverflow.com/questions/59206185
复制相似问题