软件开发架构师

Rust 1.34,针对非公有Crate推出可选注册中心

架构 140 2019-04-30 02:14

Cargo 1.34 中最重要的特性是支持使用可选 cargo 注册中心,这可能会成为企业环境中的游戏规则改变者。此外,该版本还包括在文档测试中支持? 操作符以及对标准库的一些改进。

到目前为止,对于使用专有 / 闭源代码的开发人员来说,惟一的选择是在他们的 Cargo.toml 文件中通过 git 或 path 子句指定依赖关系。这在大多数情况下都能正常工作,但主要缺点是不支持版本控制,所以必须总是使用最新的版本。在 Rust 1.34 中,Cargo 获得了对可选注册中心的支持,这些注册中心在.cargo/config 中指定,并与 crates.io 共存:

复制代码
[registries]
my-registry = { index = "https://my-intranet:8080/git/index" }

一旦你有了私有注册中心,就可以使用注册中心键来声明一个依赖项,这个依赖项应该从那个私有注册中心获取,而不是从 cargo.io

复制代码
[dependencies]
other-crate = { version = "1.0", registry = "my-registry" }

最简单的 cargo 注册中心可以通过本地 git 存储库实现,该存储库包含一个索引和一个 HTTP/HTTPS 服务器,后者用于承载使用 cargo package 创建的压缩.crate 文件。索引包含一个 config.json 文件,对于每个可用的 crate,还有一个附加文件。Config.json 文件指定从何处获得索引中可用的 crate,以及用于发布的 API 端点(如果有的话)。一个包文件基本上包含了那个特定 crate 可用的包版本列表。

可选注册中心也可以支持 cargo publish。但是,在这种情况下,一个简单的 git 存储库是不够的,你需要提供一个 Web API(通过 config.json 引用)。这个 API 将支持许多操作,包括 publish(/API/v1/crates/new)、yank(/API/v1/crates/{crate_name}/{version}/yank)、unyank(/API/v1/crates/{crate_name}/{version}/unyank)和其他操作。目前,还没有这样一个 API 的可重用的通用实现。

要将 crate 发布到可选注册中心,首先需要将身份验证令牌保存到~/.cargo/credentials 中,使用 cargo login 命令,然后,你可以使用 cargo publish --registry=…

如前所述,在语言层面上,Rust 现在支持在文档测试中使用?。文档测试是一个有用的 Rust 特性,它使你在文档中包含的任何示例都可以被 rustdoc 用作某种单元测试。直到现在,文档测试还不能使用?,除非它们包含 fn main()。

标准库还有其他一些改进。TryFromTryInto转换特性经过稳定化,增加了对易出错转换的支持。例如,使用 TryFrom 可以检查 i64 到 i32 的数字转换是否可行:

复制代码
let big _number = ...i 64;
let try _smaller _number = i 32:: try _from(big _number);
assert!( try _smaller _number. is _err());

Rust 1.34 标准库包含了更多的特性稳定化,你可以在详细发布说明中查看这些稳定化信息。

关于 Rust 的未来计划,Steve Klabnik 在Hacker News 讨论中宣布,对 async/ wait 的支持将在接下来的几个版本中开始提供。此外,Rust 还将引入 const 泛型、泛型关联类型和专门化(specialization)。

查看英文原文Rust 1.34 Introduces Alternative Registries for Non-Public Crates

文章评论