
Rust 编译器 WASI 通知组机制、加入方式与源码中的 WASI 支持全景【免费下载链接】rustEmpowering everyone to build reliable and efficient software.项目地址: https://gitcode.com/GitHub_Trending/ru/rust导读WASIWebAssembly System Interface是 Rust 编译器官方支持的重要目标平台之一。本文围绕 rustc 开发指南中的 WASI notification group 文档系统讲解 rustc 社区为 WASI 相关问题设立的通知组协作机制——包括它的定位、GitHub 标签与 ping 命令、加入流程、如何在 issue 上触发通知并结合本仓库的 triagebot.toml 配置与 rustc_target 中 WASI 目标定义 源码展开介绍 Rust 编译器当前对 WASI 各版本目标的实际支持情况。读完本文你将掌握通知组的完整参与方式并理解 WASI 支持在编译器与标准库中的落点。WASI 通知组是什么在 rustc 的开发流程中许多 bug 是孤立且中等优先级的修复它们不需要大规模重构但放着不管又容易越积越多。为此 rustc 设立了**通知组notification groups**机制让感兴趣的人以零散贡献的方式参与 rustc 维护无需预先承诺长期投入。机制概述见 notification-groups/about.md。WASI 通知组就是专门面向 WASI 相关问题的通知组。根据 wasi.md 的说明该名单用于在以下场景请求帮助诊断和测试与 WASI 相关的 issue就 WASI 支持中的有趣问题征集解决方案建议。与 WASM 通知组见 wasm.md相比WASI 组更聚焦于 WASI 标准及wasm32-wasip1/wasm32-wasip2等带系统接口的 wasm 目标而 WASM 组覆盖更广泛的 WebAssembly 编译问题。两者在 SUMMARY.md 中作为相邻章节并列。组的标识与联系渠道WASI 通知组通过以下方式标识与联系信息来自 wasi.md项目值GitHub LabelO-wasiPing 命令rustbot ping wasiZulip 频道#t-compiler/wasmZulip 频道用于提出问题和讨论 WASI 特定主题是与异步 issue 讨论互补的实时交流场所。如何加入 WASI 通知组加入过程非常简单分为两步流程详见 about.md第 1 步向 rust-lang/team 仓库提交 PR。将自己的 GitHub 用户名添加到 WASI 通知组对应的团队文件中。WASI 组的示例 PR 是 rust-lang/team PR #1580照葫芦画瓢、把用户名换成自己的即可。第 2 步仅当你还不是任何 Rust 团队的成员时在本地执行团队仓库的登记命令cargo run add-person $your_user_name即先 checkout rust-lang/team 仓库再运行上述命令完成登记。加入不附带任何承诺——你可以只在感兴趣的 WASI issue 出现时响应。加入后一旦有符合该组标准的新 issue 出现GitHub 上就会自动 ping 到你你也可以直接用O-wasi标签搜索尚未被认领的存量 issue主动出击。如何在 issue 上触发 WASI 组通知当你遇到或正在 triage一个 WASI 相关问题希望请求组内成员协助时只需在 issue 或 PR 中评论rustbot ping wasirustbot 收到命令后会向 WASI 组全体成员发送 ping 通知。需要注意的是此操作通常只应由编译器团队成员或贡献者在编译器团队 triage 流程中执行见 about.md。该机制在仓库根目录的 triagebot.toml 中有真实配置佐证[ping.wasi] message \ Hey WASI notification group! This issue or PR could use some WASI-specific guidance. Could one of you weigh in? Thanks 3 (In case its useful, here are some [instructions] for tackling these sorts of issues). [instructions]: https://rustc-dev-guide.rust-lang.org/notification-groups/wasi.html label O-wasi可见rustbot ping wasi会为 issue 关联O-wasi标签并向组成员发送上述提示消息。WASI 组当前没有配置别名对比 WASM 组的[ping.wasm]配置了alias [webassembly]见 triagebot.toml。自动打标签O-wasi 的触发路径除了手动 pingtriagebot 还会根据改动文件自动为 PR 打上O-wasi标签见 triagebot.toml[autolabel.O-wasi] trigger_files [ library/std/src/sys/pal/wasi, library/std/src/os/wasi ]也就是说任何改动library/std/src/sys/pal/wasi标准库 WASI 平台抽象层或library/std/src/os/wasiWASI 扩展 API的 PR 都会自动获得O-wasi标签确保 WASI 组成员能及时看到相关改动。源码中的 WASI 支持通知组守护的阵地要理解 WASI 组究竟在守护什么可以从本仓库源码中看到 Rust 对 WASI 支持的完整图景。rustc 的 target 定义集中在 compiler/rustc_target/src/spec/targets/ 下目前包含四个 WASI 相关目标Target 文件目标名说明wasm32_wasip1.rswasm32-wasip1基于 WASI 第一版标准preview1历史上叫wasm32-wasiwasm32_wasip1_threads.rswasm32-wasip1-threadspreview1 的线程扩展目标历史上叫wasm32-wasi-preview1-threadswasm32_wasip2.rswasm32-wasip2WASI preview2基于 WebAssembly 组件模型wasm32_wasip3.rswasm32-wasip3WASIp3组件模型原生异步支持目前是 wasip2 的轻量改版这些目标共享 base/wasm.rs 中的公共选项。从源码可以看出几个关键设计供 WASI 组排查问题时的背景知识链接器默认使用 rust-lldlinker: Some(rust-lld)并通过--stack-first让栈排在静态数据之前使栈溢出必然触发 trap 而非悄悄破坏静态数据默认栈大小设为 1MB--stack-size1048576默认panicabortWASI 目标当前不支持 unwinding整个目标无条件默认 panicabort默认静态 CRT、link_self_contained True默认使用随工具链捆绑的 crt 对象无需外部编译器即可编译见 wasm32_wasip1.rs入口符号为__main_voidWASI 会为区分不同 main 签名而改写 main 的名字wasip1 默认单线程、静态重定位模型而 wasip2 出于与共享库互操作的考虑默认 PIC见 wasm32_wasip2.rswasip1-threads 则开启atomics,bulk-memory,mutable-globals并限制最大内存 1GB见 wasm32_wasip1_threads.rs。标准库侧WASI 平台抽象层位于 library/std/src/sys/pal/wasi/实现了文件系统、网络wasip1 连接模型、随机数、环境变量、参数解析args/wasi.rs等平台能力这些目录正是自动打上O-wasi标签的触发路径。小结与参与建议WASI 通知组为所有对 Rust 的 WASI 支持感兴趣的人提供了低门槛参与入口用rustbot ping wasi在 issue 上求助、用O-wasi标签检索存量问题、通过提交 PR 加入名单。而 triagebot.toml 与 autolabel 配置 保证了通知的可靠触达。若你想深入了解 Rust 的 WASI 支持本身可从 compiler/rustc_target/src/spec/targets/wasm32_wasip1.rs 与 library/std/src/sys/pal/wasi/ 入手阅读。【免费下载链接】rustEmpowering everyone to build reliable and efficient software.项目地址: https://gitcode.com/GitHub_Trending/ru/rust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考