【问题标题】:Using Rust nightly in production在生产中每晚使用 Rust
【发布时间】:2019-06-06 22:26:43
【问题描述】:

有人可以向我解释一下 Rust nightly 是如何“生产”的吗?

我想使用 PyO3 crate,它使用需要夜间 Rust 的 specialization 功能。

使用夜间版本的 Rust 是否已准备好生产?我知道在未来的版本中可能会出现问题,并且可能会引入 API 更改,但就质量/测试/生产准备而言,夜间安全吗?

this thread on Rust users 看来,只要我限制非稳定功能的使用(例如,仅限于专业化),我应该没问题?

【问题讨论】:

    标签: rust production


    【解决方案1】:

    显然,nightly 没有稳定性保证,这使得这个问题与 George Berkeley 曾经提出的问题重复。

    然而,nightly 编译器非常稳定:每一次,即使是最普通的,对 master 分支的更改(从 nightly 中提取)都要经过 CI,CI 执行必须通过的完整测试套件。如果更改破坏了以前工作的内容,则 master 上没有“我们稍后会解决这个问题”。 其次,重大变化——比如最近对std::collectionsstd::sync 的变化——经历了火山口运行,其中构建了相当一部分公开可用的 Rust 代码;如果 PR 会破坏以前没有破坏的东西,它不会在夜间登陆。最后但并非最不重要的一点是,许多 rust 项目在每晚使用预定的 CI,手头的项目及其依赖项每月构建和测试一次。像rocket 这样的项目一直在每晚运行,如果每晚引入回归或错误,很快就会被注意到。所有这一切都意味着您的front suddenly falls off 不太可能在夜间

    不过,对于需要 nightly 的不稳定功能,情况有所不同。语义可能会发生变化,曾经工作的代码可能会或多或少地突然编译失败;但是,更改通常不太可能导致静默失败、先前定义的行为变得未定义等。

    因此,一个常见的策略是选择一个特定版本的 nightly(比如说“2019-05-09”)并坚持使用该版本一段时间。

    插件:我的意图是明确表示“可以在夜间可靠地编译东西吗?”之间存在区别。以及“nightly编译的东西可靠吗?”我会为这两个问题做一个强有力的论据,重点是第二点:1)是的,大部分时间 nightly 都能够编译你的代码。 2) 由于行为的细微变化或完全错误编译,nightly 编译的东西不太可能不可靠。

    【讨论】:

    • 感谢您的详细回答,我真正关心的是产品的使用。例如,我不会在 prod 上使用 python beta 版本,文档清楚地说明了这一点。在 rust 中,一些像 pyo3 这样的 crate 使用 nightly 的功能,这是否意味着这些 crate 不适合 prod 使用?
    • "在 rust 中,像 pyo3 这样的 crate 使用 nightly 的功能,这是否意味着这些 crate 不适合 prod 使用?"这(显然)取决于你。它符合您对“产品”环境的要求。
    • @chipo 不是 rust 语言或社区有关于在 prod 系统上使用 nightly rust 的指南/建议吗?在 python 或其他流行语言中,它非常清楚。此外,我不知道任何流行的 python 包需要不稳定的构建或不稳定的功能,如 pyo3,rust 中的所有夜间概念对我来说都是新的,我试图为我的项目做出正确的决定,但除了来自 rust 的那个之外找不到任何答案用户发帖
    • 感谢插件部分的更新,现在更清晰了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多