近日,Rust 核心团队成员 Nicholas Matsakis 在 Rust 官方博文上发表了一篇博文,介绍2017 年Rust 路线图上各项计划的进展情况。
学习曲线
Rust 应该有一条较低的学习曲线。Matsakis 指出,让 Rust 更容易学习的最简单方法是改进讲授 Rust 的方法。为此,他们致力于开发一个“Rust”官方图书的全新版本,目前已经完成草稿。该版本以Ownership 为中心,然后扩展到Rust 的其他方面,如错误处理、测试、匹配、模块,等等。此外,他们还致力于一些旨在提升语言工效学的语言改进,其中包括长期的提案,如非词汇生命期或 impl Trait
,也包括一些新的想法,如最近获得通过的有关 trait 别名的 RFC。
编辑 - 编译 - 调试
他们通过各种方法提升编译器性能。其中一个最简单的方法是 Rust 1.16 发布的cargo check
命令,该命令会跳过代码生成,只查找错误。由于代码生成通常占去了 50% 以上的编译时间,所以这在编写新代码的早期阶段非常有用。当然,你最终需要运行代码,为此你需要完整编译。为了加快编译速度,他们在努力改进编译器,实现增量编译,预计下个月可以完成。除此之外,他们还在做着其他优化编译时间的努力,其中最重要的要数 perf.rust-lang.org
网站的上线运行。该网站将跟踪每个编译优化 PR 的效果。
IDE
Rust 应该提供一个基本但可靠的 IDE。自去年 RustConf 大会首次推出以来,Rust 语言服务(RLS)增长迅速。现在,它可以支持大多数基本的 IDE 操作,如“转到定义”、“查找所有使用”以及代码补全。目前,他们的重点是简化 RLS 的安装(如通过rustup 直接安装)以及修复Bug。如果想试用RLS,那么最简单的方法是使用 VSCode 插件。
Crates 获取
随着 crates.io 生态系统规模的扩大,crates.io 网站提供的查找和分类标准已经无法帮助用户找到他们需要的 crates。为此,他们增加了分类和若干徽章,crate 作者可以将它们添加到自己的crates 上。这可以帮助人们查找特定用途的crates,并轻松判断它们的质量。此外,RFC 1824 制定了一个改进crates.io 默认分类的计划,并提供额外的信息帮助人们选择一个crate。下文会介绍到的“食谱”会提供一种以任务为中心发现crates 的方法。
服务器开发
Rust 应该具备编写健壮的服务器的能力。 Futures crate 和 Tokio 项目将继续研究异步 I/O 生态系统,这在 Hyper 和 Linkerd-tcp 中有大量的运用。此外,像 Rocket 这样的项目还在继续改善 Rust-on-the-server 工效学。目前,最大的障碍也许是 async/await 语法、更好的 Tokio/futures 文档及为生态系统提供一个可靠的 HTTP 基础。他们计划在年底的 Rust 每夜构建通道上提供 async/await 语法,并在 2018 年初提供稳定版本。
1 级 crates
Rust 应该有用于基本任务的 1 级 crates。 Libz Blitz 是一项系统性工作,其目的是为了找出 Rust 生态系统中使用最广泛的 crates,确保它们的完备性和质量都达到同一个水平。
构建系统集成
Rust 应该很容易集成到大型构建系统中。在这一方面,他们的主要工作是进一步明确面临的挑战,并有针对性地制定具体的提案,其中包括:
他们希望下半年可以加快推进这方面的工作。
社区指导
Rust 应该在各个层面提供指导。RustBridge 旨在向技术经验不足的人提供一个友好、有趣的学习环境,并向 Rust 新手提供优秀的课程。相关资料已经经过多次修订,将来还会继续完善。他们会在 RustConf 大会前一天举行RustBridge 研讨会。他们还启动了 Increasing Rust’s Reach ,倾听技术经验不足人群的需求,让更多的人可以学习使用 Rust。
此外,各种 Rust 团队也都采取了不同的措施,鼓励人们参与 Rust 项目:
- 他们新增了三个团队——基础设施、cargo 和开发工具;
- 语言团队增加了新的牧羊人角色。牧羊人是经验丰富的社区成员,他们会参加语言会议,帮助控制 RFCs 讨论方向,引导他们得出有用的结论;
- “Libz Blitz”的其中一个主要目标是帮助管理社区工作,推动程序库的实现;
- 编译器团队一直积极地进行“缺陷指导”(标记为 E-mentor 的缺陷),包括编写说明书、制定代码及工作流文档改进计划。
嵌入式 Rust
嵌入式 Rust 生态系统继续发展。近日,一个面向 Cortex-M 微控制器的裸机并发框架已经开发了出来。面向 Cortex-M 微控制器的嵌入式操作系统 Tock 也在向着纯 Rust 用户态应用程序发展。
在编译器方面,经过社区的努力,MSP430 架构支持得到了改善,而 AVR 架构支持工作也在进行之中。
另外,社区将创建一个硬件抽象层,作为构建嵌入式 crate 生态系统的基础。这项工作已经开始。
与其他语言的集成
- C 与 C++:
bindgen
可以自动将 C 和 C++ 集成进 Rust 代码库。bindgen
以头文件作为输入,并输出外部函数和类型声明,这样,就可以实现以最小的代码在 Rust 中使用 C/C++ 程序库。bindgen
已经成为 Stylo 项目的关键基础设施。要想在项目里使用bindgen
,请查看bindgen
用户指南。 - 其他语言和环境:一些更高级的语言面临自己的集成挑战,这通常涉及与外部运行时系统的协同。下面是部分主要相关项目的简单介绍:
- Ruby: Helix 项目已经开始使用 Rust 编写 Ruby 扩展;
- Node.js: Neon 同样也使用 Rust 编写 Node.js 模块;
- GNOME 对象系统:将 Rust 和 GNOME 核心开发人员结对,为 Rust 和 GObject 系统集成奠定了基础;
- Rust FFI Omnibus :为在各种语言中调用 Rust 提供指导。
总而言之,在过去的 6 个月中,Rust 世界一片忙碌。感兴趣的读者可以跟踪问题列表,了解进展及做出贡献。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论