在生产中每晚使用 Rust
Using Rust nightly in production
谁能给我解释一下 "production" Rust nightly 是怎样的?
我想使用需要夜间 Rust 的 PyO3 crate which uses the specialization 功能。
使用每夜版的 Rust 是否已准备好生产?我知道在未来的版本中可能会出现问题,并且可能会引入 API 更改,但就 quality/testing/production 而言,夜间准备就绪是安全的吗?
从 this thread on Rust users 看来,只要我限制我的非稳定功能使用(例如,仅用于专业化),我应该没问题?
显然,nightly 没有稳定性保证,这使得这个问题与 George Berkeley 曾经问过的问题重复。
但是,nightly 编译器非常稳定:对 master 分支(从中提取 nightly)的每个更改,即使是最普通的更改,都会经过 CI,执行完整的测试套件,这必须通过。如果更改破坏了以前有效的功能,则 master 上没有 "we will fix this later"。
其次,大的变化——比如最近对 std::collections
和 std::sync
的变化——经历了 crater-runs,其中构建了相当一部分公开可用的 Rust 代码;如果 PR 会破坏以前没有破坏的东西,它不会在夜间降落。最后但并非最不重要的一点是,许多 Rust 项目每晚使用 scheduled CI,手头的项目及其依赖项每月构建和测试一次。像 rocket
运行 这样的项目一直都在 nightly 上,如果在 nightly 中引入了回归或错误,很快就会被注意到。所有这些都意味着您的 front suddenly falls off 不太可能在 nightly
不过,对于需要每晚执行的不稳定功能,情况有所不同。语义可能会改变,曾经有效的代码可能会或多或少突然无法编译;然而,更改通常极不可能导致无提示故障、先前定义的行为变为未定义等。
因此,一个常见的策略是选择特定版本的 nightly(比如“2019-05-09”)并坚持使用该版本一段时间。
Addon:我的目的是明确 "can nightly compile things reliably?" 和 "are the things compiled by nightly reliable?" 之间的区别 我会为两者提出强有力的论据,着重强调第二点:1)是的,大部分时间nightly就能编译你的代码。 2) 由于行为的细微变化或完全错误的编译,nightly 编译的东西不可靠的可能性极小。
谁能给我解释一下 "production" Rust nightly 是怎样的?
我想使用需要夜间 Rust 的 PyO3 crate which uses the specialization 功能。
使用每夜版的 Rust 是否已准备好生产?我知道在未来的版本中可能会出现问题,并且可能会引入 API 更改,但就 quality/testing/production 而言,夜间准备就绪是安全的吗?
从 this thread on Rust users 看来,只要我限制我的非稳定功能使用(例如,仅用于专业化),我应该没问题?
显然,nightly 没有稳定性保证,这使得这个问题与 George Berkeley 曾经问过的问题重复。
但是,nightly 编译器非常稳定:对 master 分支(从中提取 nightly)的每个更改,即使是最普通的更改,都会经过 CI,执行完整的测试套件,这必须通过。如果更改破坏了以前有效的功能,则 master 上没有 "we will fix this later"。
其次,大的变化——比如最近对 std::collections
和 std::sync
的变化——经历了 crater-runs,其中构建了相当一部分公开可用的 Rust 代码;如果 PR 会破坏以前没有破坏的东西,它不会在夜间降落。最后但并非最不重要的一点是,许多 Rust 项目每晚使用 scheduled CI,手头的项目及其依赖项每月构建和测试一次。像 rocket
运行 这样的项目一直都在 nightly 上,如果在 nightly 中引入了回归或错误,很快就会被注意到。所有这些都意味着您的 front suddenly falls off 不太可能在 nightly
不过,对于需要每晚执行的不稳定功能,情况有所不同。语义可能会改变,曾经有效的代码可能会或多或少突然无法编译;然而,更改通常极不可能导致无提示故障、先前定义的行为变为未定义等。
因此,一个常见的策略是选择特定版本的 nightly(比如“2019-05-09”)并坚持使用该版本一段时间。
Addon:我的目的是明确 "can nightly compile things reliably?" 和 "are the things compiled by nightly reliable?" 之间的区别 我会为两者提出强有力的论据,着重强调第二点:1)是的,大部分时间nightly就能编译你的代码。 2) 由于行为的细微变化或完全错误的编译,nightly 编译的东西不可靠的可能性极小。