减少对 32 位 Apple 目标平台的支持

2020 年 1 月 3 日 · Pietro Albini

Rust 团队遗憾地宣布,Rust 1.41.0(将于 2020 年 1 月 30 日发布)将是最后一个对 32 位 Apple 目标平台提供当前级别支持的版本。从 Rust 1.42.0 开始,这些目标平台将被降级到 Tier 3。

该决定基于RFC 2837作出,并已被编译器和发布团队接受。本文解释了这项变化意味着什么,我们为什么这样做,以及您的项目将如何受到影响。

什么是支持层级?

Rust 编译器可以构建面向许多平台(也称为“目标平台”)的代码,但团队没有足够的资源或人力为每个平台提供相同级别的支持和测试。为了明确我们的承诺,我们遵循分层支持政策(目前正在RFC 2803中正式化和修订),解释了我们提供哪些保证。

  • Tier 1 目标平台可以通过 rustup 下载,并在项目的自动化构建过程中得到充分测试。影响这些目标平台的 bug 或回归通常比仅影响其他层级平台的 bug 具有更高的优先级。

  • Tier 2 目标平台也可以通过 rustup 下载,但我们的自动化构建不会对其执行测试套件。虽然我们保证会提供标准库构建(对其中一些还提供完整的编译器构建),但我们不保证它能实际无 bug 运行(甚至根本不保证能运行)。

  • Tier 3 目标平台不能通过 rustup 下载,并在我们的自动化构建过程中被忽略。您仍然可以自行从源代码构建它们的标准库用于交叉编译(某些情况下也可以构建完整的编译器),但您可能会遇到构建错误、bug 或缺少功能。

哪些目标平台受影响?

本次更改主要影响的目标平台是 32 位 macOS (i686-apple-darwin),它将从 Tier 1 降级到 Tier 3。这将影响在 32 位 Mac 硬件上使用编译器,以及从任何其他平台交叉编译 32 位 macOS 二进制文件。

此外,以下 32 位 iOS 目标平台将从 Tier 2 降级到 Tier 3:

  • armv7-apple-ios
  • armv7s-apple-ios
  • i386-apple-ios

我们将继续为所有 Apple 64 位目标平台提供当前级别的支持。

为什么这些目标平台被降级?

Apple 从 macOS 10.15iOS 11 开始停止支持运行 32 位二进制文件。他们还从 Xcode 10(该平台的 IDE,包含 SDK)开始阻止所有开发者交叉编译 32 位程序和应用。

由于 Apple 的这些决定,这些目标平台对我们的用户不再有用,而且他们阻止交叉编译的选择使得该项目难以长期继续支持 32 位平台。

这将如何影响我的项目?

如果您不构建 32 位 Apple 二进制文件,则此更改完全不会影响您。

如果您仍然需要构建它们,您可以继续使用 Rust 1.41.0 而不受影响。通常,Rust 项目将提供关键的 bug 修复和安全补丁,直到下一个稳定版本发布(2020 年 3 月 12 日),并且我们计划在可预见的未来保持该版本可供下载(就像我们对迄今为止发布的所有版本所做的那样)。

实现这些目标平台的代码不会从编译器代码库中移除,因此您仍然可以自行从源代码构建未来的版本(请注意,由于这部分代码将完全未经测试,它们可能包含 bug 或无法正常工作)。

Nightly 通道呢?

我们将很快在 nightly 通道上降级这些目标平台,但目前没有确切的日期。不过,我们建议您提前锁定一个 nightly 版本,以防止在降级应用后 rustup toolchain install 命令失败。

要锁定一个 nightly 版本,您需要使用“nightly”后跟该 nightly 版本发布的日期作为工具链名称。例如,要安装并使用 2019 年 12 月 1 日发布的 nightly 版本,您可以运行:

rustup toolchain install nightly-2019-12-01

# Default to this nightly system-wide...
rustup default nightly-2019-12-01

# ...or use this nightly for a single build
cargo +nightly-2019-12-01 build