BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Rust语言2017路线图半年回顾

| 作者 谢丽 关注 9 他的粉丝 发布于 2017年7月12日. 估计阅读时间: 7 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

近日,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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT