Rust 语言 2017 路线图半年回顾

  • 谢丽

2017 年 7 月 11 日

话题:语言 & 开发架构

近日,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 生态系统,这在HyperLinkerd-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 项目:

嵌入式 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)关注我们。

语言 & 开发架构