16

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

 5 years ago
source link: https://www.infoq.cn/article/mRtqZOiR_NhuvFd9EA7l?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 的数字转换是否可行:

复制代码

letbig_number = ...i64;
lettry_smaller_number = i32::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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK