#toolchain #version #release #index #source #obtain #stable

rust-releases

查找、索引和获取所有官方可用的Rust版本

32个版本 (重大更新)

0.28.0 2024年1月24日
0.27.0 2023年8月24日
0.26.0 2023年4月2日
0.25.0 2023年3月28日
0.9.0 2021年3月31日

#57 in 科学

Download history 1394/week @ 2024-04-07 1279/week @ 2024-04-14 1614/week @ 2024-04-21 1575/week @ 2024-04-28 1806/week @ 2024-05-05 2258/week @ 2024-05-12 1491/week @ 2024-05-19 1302/week @ 2024-05-26 1321/week @ 2024-06-02 1209/week @ 2024-06-09 1482/week @ 2024-06-16 1618/week @ 2024-06-23 1305/week @ 2024-06-30 1812/week @ 2024-07-07 1356/week @ 2024-07-14 1658/week @ 2024-07-21

6,228 每月下载量
用于 3 个crate(2个直接使用)

MIT/Apache

46KB
448

rust-releases

ci-msrv Crates.io version shield Docs Crates.io license shield MSRV shield

rust-releases版本 MSRV
0.21.1 1.51
0.22.0 1.53
0.23.0 1.63
0.24.0 1.63
0.25.0 1.63
0.26.0 1.63
0.27.0 1.67

* 当未发布时,MSRV可能会更改

简介

Rust编程语言使用确定性版本控制进行工具链发布。稳定版本使用SemVer,而夜间、beta和历史构建可以通过使用带日期的构建(YY-MM-DD)访问。

不幸的是,不再有干净的索引。我决定研究哪些资源仍然可用,并找到了以下解决方案

  1. 使用AWS索引 (来源)
  2. 从单个 发布清单 (来源)
  3. 解析Rust仓库中的 RELEASES.md

这些选项都需要额外的解析,这正是这个crate的用武之地:rust-releases crate可以从上述资源获取、解析和构建索引。此crate还提供了以线性方式或使用二分查找策略遍历版本的方法。

每个数据源都实现了 Source trait。 Source 提供了一个 build_index 方法,可以用来构建已发布Rust版本的目录。此外,对于除了 RustDistWithCLI 之外的所有解决方案,此crate还可以让此crate 获取 所需的输入文档。

实现的选项

数据源类型 特质 可用性 频道1 速度2, 3 磁盘缓存大小4 备注
RustChangelog 来源 稳定 快速 - 默认启用。在Cargo.toml清单中设置default-features = false可禁用对rust-releases依赖项的依赖。
FetchResources 即时(<1秒) ~491 KB
RustDist 来源 稳定版,测试版 & 夜间版待实现 快速 -
FetchResources 中等快速(~10秒) ~1 MB
RustDistWithCLI 来源 稳定版,测试版 & 夜间版待定 快速 -
FetchResources 慢(~1分钟) ~8 MB
ChannelManifests待定 来源 稳定版,测试版 & 夜间版待定 中等 - 输入数据再次有效(#9)。进一步的实现承诺待定5
FetchResources 极慢(~1小时) ~418 MB

1:目前,大多数的 rust-releases 公共API仅支持稳定版。beta和夜间频道支持仍在进行中,该表目前列出了是否对这些频道有理论支持。
2:对于 Source 特性的速度主要取决于解析速度
3:对于 FetchResources 特性的速度主要受限于您自己的下载速度以及获取资源的服务器速率限制
4:截至2021年3月3日的近似值
5:虽然频道清单是最完整的可用来源,但如果没有先添加一些增量实现,实际上下载速度太慢,而这样做仍然需要大量的初始下载。由于我们目前没有使用清单文件中大多数的数据,通常最好选择不同的来源。我们更有可能选择频道清单,取其子集并编译成更小的源类型。

我应该使用哪个数据源?

由于beta和夜间频道支持仍在进行中,我建议使用 RustChangelog 数据源,因为它下载量小,发布时立即更新,且解析速度快。它仅支持稳定频道版本。

或者,可以使用 RustDistRustDistWithCLI 数据源,特别是在添加beta和夜间频道支持时。它们都从Rust AWS S3分发存储桶获取输入数据。当使用 RustDist 时,可以通过 FetchResources 特性的实现来获取输入数据。对于 RustDistWithCLI,您必须自己获取输入数据(通过运行以下选项的 aws 命令行工具:aws --no-sign-request s3 ls static-rust-lang-org/dist/ > dist.txt(source))。

应用

cargo-msrv 是一个工具,可以用来确定最小支持的Rust版本(MSRV)。它构建您的Rust包并检查构建是否成功或失败,因为这可以给出关于版本是否与您的(外部)依赖项兼容的最完整想法。 cargo-msrv 使用二分查找,或逆向线性搜索,来找到最低的合适Rust版本。为此,它需要了解已发布和可安装的工具链。

最初,我们只是解析最新的频道清单,然后降低小数点后的版本号,但这显然有很多原因不理想,包括

  • 除了最新发布的版本外,我们只能猜测降低的版本号实际上存在
  • 仅支持稳定版本,不支持夜间、beta或其他频道
  • 仅支持1.x.0版本

这并不理想,因此诞生了 rust-releases。现在 cargo-msrv 可以遍历我们已知存在且可用的Rust发布版本。

依赖项

~0.3–11MB
~105K SLoC