【发布时间】:2018-09-15 07:42:05
【问题描述】:
什么是稳定过程?阅读发行说明,我看到了许多不同的标准库 API 甚至语言特性(例如下划线生命周期)。 API 如何变得稳定?
【问题讨论】:
标签: rust
什么是稳定过程?阅读发行说明,我看到了许多不同的标准库 API 甚至语言特性(例如下划线生命周期)。 API 如何变得稳定?
【问题讨论】:
标签: rust
稳定化是向 Rust 添加新功能的方式。与许多语言不同,当添加东西时,它会在下一个版本中发布,Rust 有一个多阶段的过程,因此我们可以在它们计划包含在稳定的 Rust 中之前试用这些功能。
只需发送拉取请求即可添加小功能,尤其是新的库 API。更大的功能通过the RFC process,以便在实施之前可以围绕设计达成一些共识。如果 RFC 被接受,则可以通过 PR 发送实现。每当添加新功能时,它都会通过“功能门”,即一个特殊属性 #![feature],让您可以选择尝试该功能。
每晚(好吧,有时不是每晚,但几乎每晚),都会构建 Rust 的每晚版本。每晚构建用于测试,因此,您可以使用 #![feature] 属性选择新的、不稳定的功能。然后,用户可以试用这些功能、报告错误并评论 API 或功能在现实世界中的使用方式。
每六周,每晚发布一次“测试版”。 Beta 类似于候选版本,因此它们不允许您使用#![feature],因此,也不允许您使用实验性功能。六周后,新的 nightly 版本变为 beta,beta 版本变为新的“稳定”版本。这就是大多数人在谈论 Rust 时的意思,也是大多数 Rust 用户使用的。 Stable Rust 也不允许您使用 #![feature],因为这些功能并不稳定。
无论如何,经过一段时间(至少是一个完整的发布周期),如果某个功能很好,团队会讨论是否应该使其稳定。如果他们决定是,则删除#![feature] 要求,并且该功能将“乘火车”到最终的稳定版本。如果他们决定不这样做,它将被弃用并最终被删除。
【讨论】:
Rust 倾向于采用敏捷方法来引入功能和 API,以便根据反馈对它们进行迭代1。
但是,迭代功能或 API 的设计与 Rust 对向后兼容性(又称稳定性)的坚定承诺相悖。因此,稳定过程旨在解决这个明显的难题:
#![feature],这样,爱好者可以使用 nightly 来试验该功能,并提供反馈以完善它,而任何其他用户都可以使用任何可用的功能,并确信他们不会意外使用不稳定的功能。
一旦一个功能被判断为准备就绪,最后一步就是让负责团队批准它;然后移除功能门,该功能在所有频道上都可用(当然,从夜间传播到稳定需要一些时间)。
1规范失败的一个著名例子是 C++98 的“导出模板”功能;它只在 EDG 前端实现过,这个唯一的功能花了一年多的时间。从那时起,C++ 委员会通常要求原型实现。
【讨论】: