Rust 1.58的更新包括格式化字符串添加可捕捉的识别符号{ident},并且减少Windows命令搜索的路径,还在标准库中加入更多#[must_use]注解

程式语言Rust开发团队发布最新1.58版本,这个版本有不少编译器上的更新,同时也强化编程功能,目的在使Rust更容易使用。 Rust 1.58在格式化字符串(Format String)中,加入了可捕捉的识别符号,并且更改Windows上命令搜索路径,在标准库中加入更多#[must_use]注解。
现在开发者可以在字符串中,使用{ident}来捕捉参数,过去格式接受位置参数以及命名参数,而现在命名参数也能够在周围范围被捕捉,而这同样也可用于格式化参数,格式化字符串只能捕捉普通的识别符号,不能捕捉任意路径或是表达式,对于更复杂的参数,开发者必须对参数指定区域名称,或是使用较旧的name = expression格式化参数类型。
官方提到,这项新功能可以在所有接受格式化字串的巨集中使用,不过,例外则是2015年和2018年版本的panic!宏,当panic! (”{ident}”)还是被当作为格式化字符串时,编译器会发出警示,告诉开发者该写法没有预期效果。 由于2021版本,官方更新了panic宏进而提高了一致性,因此这项新功能可以在2021中的panic!运作。
Rust 1.58减少Windows命令搜寻的路径,在Windows上,std::p rocess::Command将不再于当前工作目录中搜寻可执行档案。 过去受win32 CreateProcess API的影响,Rust按特定的优先级执行搜寻,会先搜寻子PATH环境变量中列出的目录,接着是加载应用程序的目录、父程序的目录、32位的Windows系统目录、16位的Windows系统目录、Windows目录,最后则是PATH环境变量列出的目录。
官方解释,由于使用当前工作目录可能产生预料之外的结果,或是当在处理未受信任目录时,产生恶意行为,即便是微软自己的PowerShell文件,也不使用当前目录,以确保其安全性。 而现在没有当前目录的情况下,Rust会按照新的优先级进行搜寻。
但因为没有API可以探索16位Windows系统目录,因此Windows上Rust的新命令搜寻顺序,将会跳过16位Windows系统目录,仅有子PATH环境变量中列出的目录、加载应用程序的目录、32位的Windows系统目录、Windows目录以及PATH环境变量列出的目录。 在非Windows上,将仰赖特定平台的行为,通常只考虑子或父PATH环境变量。
另外,在Rust 1.58中的标准函式库,加入更多的#[must_use]注解,大多数函数都带有#[must_use]注解,忽略回传的值将会出现警告。 Rust编译器在这个版本也有不少更新,像是在抛出lint错误之后,还是能继续编译,以显示更多有用的错误信息等。
Rust的套件管理器Cargo,现在加入一个新的后设数据字段,以表示最小支持的Rust版本,这对其他工具来说将会是很有用的信息,另外Cargo在install指令加入—message-format选项,并且在后台,更新curl至7.80版本,以更好地支持OpenSSL 3。
