Rust 2021版本来了:与Armin Ronacher的问答

250 阅读4分钟

Rust 2021版 于10月21日与 Rust1.56.0 一起完美地如期登场。最新版本的语言包括对不相交捕获、宏规则中的or 模式等的支持。

InfoQ在去年5月首次公布Rust 2021版时报道了它的情况。我们在那里讨论了版本对于语言发展的重要性,它是一种在确保向后兼容的同时实现改进的机制。

2021年版本的两个亮点是闭包中不相交的捕获和宏规则中的 "or "模式的引入。

不相交的捕获 为闭包内的值或引用提供了更精细的捕获。例如,如果一个闭包只使用一个结构中的一个字段,那么Rust 2021将捕获这个特定的字段,而不是试图捕获整个结构,这是不允许的:

//-- 现在允许这样做了,而之前你必须用let y = &a.y来分别捕获字段
let c = || print!("{}", aStruct.y);

当使用宏时,你现在可以使用or模式 ,用|操作符表示。例如,你可以写Some(1 | 2),而在以前的版本中你必须使用Some(1) | Some(2)。这是因为在宏定义中使用的$_:pat指定符不能与|匹配,而现在可以。

2021版Rust语法的另一个重大变化是into_iter,它可以用来迭代一个数组。array.into_iter()现在按值迭代项目,而以前是按引用迭代。语法array.into_iter()在旧版本的语言中会解析为(&array).into_iter(),以确保向后兼容。

InfoQ借此机会采访了Sentry的工程总监Armin Ronacher,了解了Rust现在的情况。

InfoQ:你至少从2015年开始参与了Rust的工作。你能简单介绍一下你在Rust方面的工作和经验吗?

Armin Ronacher:我第一次了解Rust是在2012年,在它发布1.0版本的几年前。我发现这种语言的概念非常有趣,它背后的路线图、社区和原则也给我留下了深刻印象。当我开始在Sentry工作时,我慢慢地将Rust引入到对我们的基础设施有意义的地方中,它已经成为Sentry的一种核心语言。

InfoQ:你被称为是流行的PythonFlask框架 的作者。可以说Rust和Python在同一个人身上是一个相当不常见的组合。你是如何接受这种二元论的?

Ronacher:我认为Python和Rust在这些日子里是携手并进的。多年来,Python开发者习惯于用C、C++和Cython写扩展,并且这就是他们中的许多人认识Rust的原因。Rust是一种很好的语言,可以在PyO3等库中编写Python扩展模块。另外,与Rust社区的互动给了我强烈的早期Python氛围。

InfoQ:在你看来,Rust 2021版将为开发者带来的三个最引人注目的功能是什么?

Ronacher:2021版不是一个巨大的进步,这在很大程度上是故意的。这些版本是使代码更加现代化的一种方式,并清理了那些本来会向后不兼容的问题。这里的例子是,你现在可以得到一个数组迭代器,这在以前是不可能以向后兼容的方式实现的。大部分的新功能,即使你在旧版的编译器中也可以使用。在这个意义上,我不指望有什么大的变化。也就是说,2021版保留了一大堆东西,以期待即将到来的东西。特别是我正在为格式化字符串成为一项功能的日子倒计时。

InfoQ:说到Rust的现在和未来,这门语言现在的状况如何?

Ronacher:Rust在许多领域已经站稳了脚跟,尤其是在需要性能的地方。在网络服务方面,情况就不那么明确了。要使Rust成为理想的服务语言,还有很多不足之处(缓慢的编译时间,相对较弱的HTTP生态系统,次优的异步IO故事)。同时,这些领域的工作也在不断进行,Rust迟早会在这方面做出一些重大改进。Rust的迷人之处在于,它似乎在不成熟的环境中不断被拾起,并在相对较大的用户中逐渐成熟。我已经看到它出现在移动设备、物联网设备、机顶盒、WASM、计算机游戏、无服务器等领域。除了C++之外,很少有语言开始捕捉到如此广泛的环境。

Rust 2021版包括的功能比这里要多得多,所以不要错过官方公告的全部细节。