Rust 1.58进一步简化语言功能降低使用难度

程序语言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::process::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。