APP下载

Rust 1.53加入阵列IntoIterator和巢状or语法

消息来源:baojiabao.com 作者: 发布时间:2026-02-15

报价宝综合消息Rust 1.53加入阵列IntoIterator和巢状or语法

程式语言Rust开发团队,发布了最新版本1.53.0,这个版本加入了几个新的语言功能,也更新许多函式库功能,也终于实做了开发者期待已久的阵列IntoIterator,不过,渐增编译功能在这个版本仍然预设关闭。

从1.53.0版本开始,开发者就可以在识别字(Identifier)使用Unicode,因此能以各种语言编写识别字,但是仍然不能使用◆这种不被视为文字的字形或表情符号。Rust允许开发者使用任何符合UAX #31 Unicode识别字和模式语法标准的识别字,这与Python这类使用相同标准的语言一样,但是由于Rust在Unicode正规化选用了NFC标准,因此可能又与其他语言不同。

Rust 1.53也是第一个在阵列实作IntoIterator语言特征(Trait)的版本,这代表开发者可以按值迭代阵列。在阵列实作IntoIterator有向后相容的问题,因为IntoIterator之前已经被用来实做参照阵列,array.into_iter()已经在早期版本中编译,解析为 (&array).into_iter(),所以开发团队一直推延这项功能实作的时程。

而从这个版本开始,开发团队采取了小手段,以一个变通方法在阵列实作IntoIterator,进而避免破坏程式码。编译器会继续将array.into_iter()解析为(&array).into_iter(),就如同该Rust语言特征实作不存在一样。这只适用于.into_iter()方法呼叫语法,并且不影响任何其他语法,诸如for e in [1, 2, 3]、iter.zip([1, 2, 3])或IntoIterator::into_iter ([1, 2, 3])都可以良好编译。

官方提到,这个.into_iter()特殊处理方式,只是为了避免现有程式码遭到破坏,会在今年稍晚发布的Rust 2021新版本中移除。

这个版本也更新了Or模式,模式语法扩充支援巢状|,让开发者现在可以将Some(1) | Some(2)写成Some(1|2)。Cargo也不再假设Git储存库的HEAD分支预设名为Master,因此开发者也就不再需要替储存库中Git相依项目指定分支为Main,其预设就是Main分支。

而在这个版本,渐增编译(Incremental Compilation)功能预设仍然关闭。Rust开发团队在5月的时候,发布了1.52.1版本,这个版本是专为解决1.52.0中,渐增编译错误成为编译器错误的臭虫,开发团队提到,因为渐增编译的臭虫,使得编译器最终生成的构件可能包含错误程式码,因此产生格式错误的二进制档案。

目前官方只掌握部分编译错误,官方提到,使用者在看见未预期的二进制档案结果时,通常会进行一些简单的编辑,而这些动作通常会导致重新编译,臭虫也就可能被修复,因此渐增编译所产生的错误很难追踪。渐增编译目前在测试和Nightly版本仍然可以使用,而要在1.53.0稳定版本开启渐增编译功能的方法与之前版本相同。

2021-06-23 11:59:00

相关文章