上周我们在柏林举办了一场“全体会议”,吸引了来自15个不同Rust团队或工作组的50多名成员,其中大部分是志愿者贡献者。这是第一次举办此类活动,其地点反映了目前欧洲团队成员的集中度。这次为期一周的活动取得了巨大成功,我们计划至少每年举办一次。
这次聚会的部分动力来自于我们雄心勃勃的计划,即今年晚些时候发布 Rust 2018 版本。为期一周的专注工作面对面交流是启动这些努力的绝佳方式!
我们还邀请了与会者在#RustAllHands标签下撰写博客和推文,分享他们的经历;内容团队也将收集并总结这些内容。
各团队亮点
下面我们将回顾上周处理的最重要事项。请注意,一如既往,在会议中达成共识并不意味着做出了任何最终决定。所有重大决定都将通过通常的RFC流程。
语言设计
- 宏 (Macros):为 2018 版本制定了提案。
- 稳定化一个前向兼容的过程宏子集,该子集明确选择退出卫生机制(通过要求所有名称在调用点解释)。
- 根据我们迄今为止的经验,制定了过程宏的修订版 API 接口。
- 稳定化通过普通
use
语句导入宏的功能。 - Alex Crichton 将推动稳定化过程.
- 外部类型 (Extern types):解决了稳定化剩余问题。
derive
改进:一项提案,旨在使 Rust 2018 中的derive
更符合人体工程学。- 最佳实践:启动了一项跨领域的指南工作,涵盖了 API 指南,同时也包括风格、lint 和语言团队建议。
库 (Libraries)
- SIMD:讨论了稳定化的最后步骤;我们希望在1.27 版本中稳定化。
- 分配器 (Allocators):制定了一项关于稳定化全局分配器的保守提案;Simon Sapin 已建立新的跟踪问题。
编译器 (Compiler)
- 工具集成:就编译器客户端需求、可组合插件以及编译器新查询架构进行了广泛讨论和规划。
- 查询编译:端到端查询编译(即完全增量编译)计划。
- libsyntax:一项关于重塑 libsyntax 的长期计划,供多种工具共享。
- 贡献:改进了编译器的贡献体验。
社区 (Community)
- Mozilla Activate:页面改版已发布
- RustBridge “盒装版”:发布了大量资源。
- 活动:制定了活动标准,包括
文档 (Documentation)
- 版本规划:确定了 2018 版本所需的资源,这对 Rust Bookshelf 意味着什么,以及各部分由谁负责。
- 团队博客:“本周 Rust 文档”将移至新的文档团队博客!
- Doxidize(又名 rustdoc2):发布了初始公开版本;它就像 https://docusaurus.org.cn/,但用于 Rust。
- 中级文档:为创意生成做出了贡献。
工具 (Tools)
- 版本规划,特别是针对 rustfix 工具的。
- Clippy lint 审计:制定了今年将 Clippy 达到 1.0 的计划,基于将 lint 分为正确性、性能、风格、复杂性、学究气和孵化中等类别。
- 自定义测试框架:就该 RFC 的大部分细节达成了共识
- IDE:讨论了代码补全改进、稳定性改进以及重构和自动导入支持等新功能。
Cargo
- Xargo 集成:将更多平台升级到第一级(tier 1)解决了嵌入式领域的眼前需求;否则,计划在 2018 年晚些时候走“std-aware Cargo”路线。关键点:将完全取代 rustup 中“目标”的概念。
- Rustup 集成:通过 Xargo 集成,我们可以简化 rustup;计划在 2018 年晚些时候通过 Cargo 公开新接口。
- 自定义注册表:准备稳定化。
- 配置文件 (Profiles):v2 设计已清晰,Aleksey Kladov 计划实现。
- 公共依赖项:显著修订了计划,以减小对生态系统的影响。Aaron Turon 将撰写一篇博客文章。
- 构建系统集成:确定了实现两项功能,以解耦 RLS 与 Cargo。
- 项目模板:制定了最小设计;withoutboats 将撰写 RFC。
- 自定义工作流:设计了工作流自定义功能,这对框架很有用;Aaron Turon 已撰写一篇博客文章。
基础设施 (Infrastructure)
- bors 队列:构思并投入资源,提出许多想法来减少 Rust 2018 的 PR 队列。
- crater:pietroalbini 正在测试一个用于运行 crater 的机器人!
- Travis 日志机器人:TimNN 编写了一个机器人,用于从 Travis 日志中提取错误
工作组:CLI 应用
工作组:网络服务
- 工作组概述幻灯片.
- 启动工作组:确定了工作组的目标,包括 async/await、文档、中间层 HTTP 库以及 Tower 生态系统。启动公告即将发布!
- Async/await:最终确定了 RFC 的设计和稳定化方法(博客文章和 RFC 链接在此)。
工作组:嵌入式设备
- 工作组概述幻灯片
- 稳定版上的嵌入式 Rust:解决了所有已知障碍以及几个中等优先级问题。
- 《嵌入式 Rust 指南》:定义了目标读者和基本大纲。
工作组:WebAssembly
- 工作组概述幻灯片.
- 2018 版本规划,包括为发布确定工具链和书籍工作范围。
- JS 集成:深入研究了 wasm-bindgen 中集成 JS 回调与 Rust 函数的问题。
- 生态系统集成:wasm-bindgen 现在支持 CommonJS!
- 代码膨胀,将 panic 的占用空间从 44k 减少到 350 字节。
Unsafe 代码指南
- 重启工作组:重新研究了两种竞争方法(基于“有效性”和基于“访问”),并对两者进行了大量迭代。Niko Matsakis 和 Ralf Jung 将撰写博客文章介绍这些想法。
- 紧迫问题:处理了一些需要尽快做出的近期决定,包括
union
语义、Pin
语义、thread::abort
等。
网站
- 领域工作组草图绘制:经过几次会议,四个以领域为中心的工作组(如上所述)为各自领域制定了一些初始登陆页草图。
Rust 影响力 (Rust reach)
- 准备发布,这已于本周早些时候发生!
新工作组
除了现有团队的工作,我们还具备了成立两个新工作组的关键条件
- 验证:汇集对测试、静态分析和形式化验证感兴趣的人员。
- 代码生成 (Codegen):致力于提高 rustc 生成代码的质量,包括大小和运行时性能方面。
验证工作组已正式宣布成立,代码生成工作组也应很快宣布!
总体回顾和致谢
明确的目标——Rust 2018——以及绝大多数团队成员的出席,使得这次全体会议非常有趣和富有成效。我们努力通过异步在线交流保持 Rust 社区的开放和包容,但偶尔面对面交流也很重要。上周展现出的雄心壮志与友善的结合,真正体现了 Rust 社区的精神。
当然,像这样的活动离不开很多帮助,我想感谢联合组织者和 Mozilla 柏林办公室的工作人员:
- Johann Hofmann
- Jan-Erik Rediger
- Florian Gilcher
- Ashley Williams
- Martyna Sobczak
以及所有组织和主持会议的团队负责人!