Python 增强提案:明确 WebAssembly 标准,重塑 Python 应用交付格局
【导语:新获批的 Python 增强提案明确了 Python 未来遵循 WebAssembly 标准的方式。这一举措有望解决 Python 在 Wasm 应用中的诸多问题,提升 Python 与 Wasm 协同工作的效率,对开发者和整个生态系统意义重大。】
大多数语言如 Rust 可直接编译为 Wasm 二进制目标文件,但 Python 作为解释型语言,需将解释器本身编译为 Wasm 后运行 Python 程序。这带来两个主要问题,一是运行 Python 程序需完整的解释器和标准库副本,且无机制将 Python 程序编译为含解释器副本的自包含 Wasm;二是任何非纯 Python 编写的模块,如 NumPy,需提前编译出 Wasm 特定版本才能在 Wasm 中运行。
Python 对 Wasm 的支持涉及 WASI 和 WASI SDK。WASI 是 Wasm 程序与主机系统交互的规范,WASI SDK 是该规范的官方实现,它是 Clang 编译器的修改版本,使用 wasi - libc 库,让 C 及兼容 C API 的语言编写的程序能访问主机 API。然而,wasi - libc 不保证向前或向后兼容,某些版本的 SDK 可能与特定版本的 CPython 存在兼容性问题。
从 3.11 版本开始,CPython 已在 Wasm 上可用,提供二级和三级支持,更新的 wasip1 标准支持更好,旧的 Emscripten 标准支持较少。且 CPython 使用的 WASI SDK 不一定是最新版本,如 3.11 和 3.12 使用 SDK 21 版本,3.13 和 3.14 使用 SDK 24 版本。
未来,CPython 针对使用 WASI 及其 SDK 制定严格规则:某个 CPython 版本的第一个测试版发布时所支持的 WASI 或 WASI SDK 版本,将在该版本的整个生命周期内得到支持。对特定版本所使用的 WASI 规范或 SDK 版本进行更改,需得到 Python 指导委员会批准,特殊情况除外。
未来,Python 在与 WASI 协同工作方面将显著改进。这使 CPython 开发者更易确定要针对的 WASI 和 SDK 版本,整个 WASI 生态系统也能更清晰哪些 Python 版本与不同版本的 WASI 和 SDK 兼容。维护带有扩展模块的 Python 库的开发者能更清楚如何将模块编译为 Wasm 适配各 Python 版本,还能更早利用更新的 WASI 特性。
编辑观点:Python 增强提案明确 WebAssembly 标准,解决了 Python 在 Wasm 应用中的痛点,为开发者提供了更稳定的开发环境,将推动 Python 在 WebAssembly 领域的应用,促进整个生态系统的发展。
