C++ 正式支持新平台:这对开发者意味着什么

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

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

开始课程

C++ 现已正式支持 WASI:跨平台开发的新阶段



C++ 语言标准化委员会 (ISO/IEC JTC1/SC22/WG21) 与 LLVM 开发团队及 WebAssembly 项目共同宣布了一个期待已久的消息:C++ 语言获得了对 WebAssembly 系统接口 (WASI) 平台的官方、文档化的支持。这意味着,开发者现在可以编写在传统操作系统(Windows、Linux、macOS)之外,还能在浏览器之外的 WebAssembly 环境中(服务器、物联网设备及云端边缘系统)运行的 C++ 系统级代码。



什么是 WASI,为什么它对 C++ 很重要?



WASI (WebAssembly 系统接口) 是一个标准化的系统接口,它为 WebAssembly 模块提供对文件系统、网络套接字、时间以及其他操作系统资源的访问。此前,C++ 可以编译为 WebAssembly,但与外部世界的交互仅限于浏览器环境。现在,随着对 WASI 的官方支持,C++ 获得了一个完全隔离的环境,用于在浏览器之外安全地执行代码。



  • 安全性: C++ 模块在具有资源访问控制的沙箱中执行——非常适合多用户服务。
  • 可移植性: 一个 .wasm 二进制文件可在任何拥有 WASI 运行时环境(Wasmer、Wasmtime、WAMR)的操作系统上运行。
  • 性能: 将 C++ 直接编译为原生 WebAssembly 代码(通过 Clang/LLVM)可提供接近原生的执行速度,且没有虚拟机的额外开销。


C++ 生态系统发生了什么变化?



主要的新特性是发布了将 C++ 代码移植到 WASI 的官方指南,并将 WASI 支持纳入 LLVM 主仓库。现在,任何 C++ 项目都可以通过一个简单的编译器标志编译为 WASI:



clang++ --target=wasm32-wasi -O3 my_program.cpp -o my_program.wasm



此外,C++ 标准库(libc++、libc++abi)也已更新,以便与 WASI 系统调用正确协作。开发者不再需要手动配置与外部库的链接——一切都可以“开箱即用”。



目前已在哪些地方应用?



  • 云计算: 在隔离的 WASI 容器中运行 C++ 微服务(例如,在支持 WASI 的 Fastly Compute@Edge 或 Cloudflare Workers 中)。
  • 嵌入式系统: 使用 WASI 安全更新用 C++ 编写的物联网设备固件。
  • 科学计算: 将计算密集型的 C++ 模块(线性代数库、模拟程序)迁移到 WASI,以实现无需重新编译的跨平台运行。


未来计划?



近期计划包括在 WASI 中完全支持 C++ 多线程(目前仅支持单线程模型),以及与 C++20/23 协程的集成。社区已经在努力适配流行的库(Boost、Qt、OpenCV)以编译到 WASI。请关注官方网站 wasi.dev 和 LLVM 仓库以获取最新更新。



如果您正在使用 C++ 进行开发,并希望

推荐库