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中,渐增编译错误成为编译器错误的bug,开发团队提到,因为渐增编译的bug,使得编译器最终生成的构件可能包含错误程序代码,因此产生格式错误的二进制文件。

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