WebAssembly 与 C++:如何在浏览器中运行 PythonLib 代码

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 C++ 突然变成了 Web 技术?



如果您使用 C++ 编程并访问 PythonLib,您可能已经习惯了您的代码存在于某个深处——在服务器端、游戏引擎核心或高负载计算中。Web 前端传统上是 JavaScript、HTML 和 CSS 的领域。但过去五年,一切都变了。



想象一下:您用 C++ 编写了一个复杂的图像处理算法或物理模拟。以前,要在浏览器中展示它,您必须用 JavaScript 重写所有内容——这会损失性能和时间。现在有了 WebAssembly(通常简写为 wasm)。这项技术允许您直接在浏览器中运行编译后的 C++ 代码,速度接近原生。



在本文中,我们将探讨对于 C++ 开发者来说 WebAssembly 是什么,为什么 PythonLib 项目需要它,并编写一个将 C++ 编译为 wasm 的真实示例。没有废话,只有代码和实践。



简单来说,什么是 WebAssembly



WebAssembly 是一种低级二进制指令格式。您可以将其视为“Web 的汇编语言”。浏览器(Chrome、Firefox、Safari、Edge)能够以几乎与原生机器代码相同的速度执行 .wasm 文件。



与 JavaScript 的主要区别:wasm 不是一种编程语言,而是一个编译目标。您使用 C++、C、Rust 或 Go 编写代码,将其编译成 .wasm,然后浏览器运行它。



C++ → WebAssembly 的工作原理



过程如下:

  • 您用 C++ 编写代码(例如,一个计算斐波那契数的函数或一个复杂的数学模块)。
  • 您使用 Emscripten 编译器(基于 LLVM/Clang)将其构建为 .wasm 文件以及 JavaScript 包装器。
  • 您将生成的文件链接到 HTML 页面。
  • 用户打开页面——C++ 代码就在他们的浏览器中执行。


对于 PythonLib 来说,这开辟了有趣的可能性:例如,您可以编写一个用 C++ 实现的计算库,将其编译为 wasm,然后在网站上的教学示例中使用它,而无需用户安装编译器。



为什么 C++ 开发者需要 WebAssembly(以及这与 PythonLib 有何关系)



许多人认为 WebAssembly 仅用于游戏或重型图形。实际上,它的应用场景要多得多。以下是为什么在 PythonLib 上值得了解 wasm 的关键原因:



  • 速度。用 C++ 编写的关键代码段比纯 JavaScript 实现的类似代码快 2-10 倍。如果您正在编写数学或加密算法——wasm 是您的选择。
  • 代码复用。无需为 Web 重写旧的 C++ 库。编译一下,就完成了。
  • 安全性。Wasm 在浏览器的隔离沙箱中执行。这比运行原生插件更安全。
  • 教育意义。在 PythonLib 上,您可以展示直接在浏览器中运行的实时 C++ 代码示例——读者不仅能看到语法,还能看到执行结果。


另一个重要点:WebAssembly 不会取代 JavaScript,而是对其进行补充。JS 仍然用于管理 DOM、事件和界面,而 C++ 负责计算。



实践:将 C++ 编译为 WebAssembly



让我们编写一个简单的 C++ 程序,将其编译为 wasm 并在浏览器中运行。为此,我们需要 Emscripten SDK。



步骤 1. 安装 Emscripten



如果您使用 Linux 或 macOS,可以通过一条命令完成安装(更多详情请访问 emscripten.org):



git clone https://github.com/emscripten-core/emsdk.gitcd emsdk./emsdk install latest./emsdk activate latestsource ./emsdk_env.sh


在 Windows 上

博客

书籍推荐