Cargo稀疏协议在Rust 1.68已达稳定,可提升Crate操作性能

在Rust 1.68版本中,组件管理器Cargo的稀疏注册表协议已经进入稳定阶段,可改善开发者在访问crates.io的性能,同时Rust加入新的功能pin!宏,并且默认内存分配错误处理程序。

之前Cargo为了要确认crates.io上存在的Crate,需要下载一个记录所有Crate版本的索引,而该索引托管在GitHub的存储库上,该系统由GitHub服务器端处理,以增量截取的方式获取更新。官方提到,随着时间发展索引大幅增加,也达到了系统扩展限制,初始截取和更新速度变慢。

因此官方引入了一个新协议,改进Cargo访问索引的方式,现在Cargo不再使用Git,而是直接使用HTTPS直接通过索引获取文件,Cargo只会下载项目中特定的Crate相依项目。官方预计要在Rust 1.70让稀疏协议成为默认,但是crates.io的Git存储库仍会作为索引的真实来源,Cargo也会继续无限期支持Git索引。

由于官方在https://index.crates.io/上托管crates.io索引,当开发者位于防火墙或是代理之后,便需要允许Cargo访问该站点。

而在Rust新版本中,也加入新的功能pin!宏,能够将T表达式构建成Pin

Rust 1.68也默认内存分配错误的处理程序。过去Rust在分配内存失败时,无法指出Box::new和Vec::push等API错误,所以需要通过一些特殊的程序代码路径,处理这些错误和异常,当使用std crate的时候,程序就会将错误输出到标准错误输出stderr中。

而在Rust 1.68中,虽然包含std的二进制文件将继续这样的行为,但是在只包含alloc但不包含std的二进制文件,在分配失败的时候则会触发panic!宏,官方表示,之后std的行为也会更改,使其与仅包含alloc的二进制文件一致。