Rust 成立规范团队,推动官方语言规范制定
Rust 团队在几个月前接受了 RFC 3355 的提议,决定开始制定 Rust 语言的官方规范。由 Eric(Rust Reference 的维护者)、Felix(Rust 语言团队)、Joel(Rust 基金会)和 Mara(RFC 的作者)来共同推动这项工作的进行。
截至今日,Eric 四人代表规范团队发文介绍了这项工作的最新进展,以及后续的一些其他规划。
Editor
第一步是填补 RFC 中规定的“editor”角色。规范的协调和编辑职责被特意委托给 Rust 基金会,以确保工作的连续性。
由于没有面试到合适的人选,基金会选择考虑内部选择作为替代方案。作为其现有工作的一部分,该基金会的技术总监 Joel 表示愿意担任该职位的候选人。Eric、Felix 和 Mara 等也同意了这一提议,“因为他在行业标准和技术编辑方面拥有丰富的经验,并且与 Rust 项目关系密切”。
规范团队(Specification Team)
由于相关工作不可能只由 editor 单人完成,因此还在围绕规范工作组建一个团队,即规范团队(Specification Team),作为语言团队的一个子团队。
最初成员包括:
- Felix Klock (team lead)
- Mara Bos (team lead)
- Joel Marcey (team member, editor)
- Eric Huss (team member)
利益相关者(Stakeholders)
将挑选并维护一份利益相关者名单,他们将担任顾问和审阅者。最初名单包括:
- Rust 语言团队全体成员
- 来自 types team 的一名或多名代表
- operational semantics team 的一名或多名代表
- 来自 Ferrocene 的一名或多名代表(高可靠性/可用性,例如汽车行业。)
- Formal Methods Research and Development 的一名或多名代表
- Operating System Development的一名或多名代表 (Rust for Linux; Microsoft)
Authority and Approval
虽然规范团队负责撰写和编辑规范,但 Rust 语言的定义权仍属于相关团队,如语 language team 和 library API team。这些团队应在必要时让其他团队/子团队参与进来,例如提出问题、提名问题进行讨论以及请求 FCP 批准关键决策。
为了让规范团队能够在不受审批流程限制的情况下生成内容并进行迭代,我们将在工作存储库中制定规范草案。在一些工具的帮助下,我们将公开跟踪哪些项目仍需要团队批准,以及哪些项目受到利益相关者的公开关注。
我们将所有变更分类为次要变更或重大变更。较小的更改是对规范团队来说似乎没有争议或微不足道的项目。例如,语言团队已经通过 FCP 批准的更改、排版和语法修复、初衷明确的澄清,以及类似的令人兴奋的更改。重大变更是那些可能有问题、重要或有争议的变更。规范团队和相关权威团队的任何成员以及任何规范利益相关者都可以将更改标记为重大更改。对规范的重大更改必须经过通常的批准流程(例如语言 FCP)才能出现在规范的已发布(非草案)版本中。
语言和规范团队应努力拥有至少一名共同成员(例如 Felix)充当联络人,以帮助确保我们对次要变更与重大变更的理解保持同步。
目标
规范团队的目标是创建和维护 Rust 规范。Rust 规范的目的是提供权威资源来确定哪些源文本是有效的 Rust 程序以及此类程序的行为方式。
一个理想的规范既要:
- 为当前和未来的 Rust 版本定义给定 Rust 程序的语义的规范边界
- 提供与该规范实例相关的 Rust 版本特有的语义描述细节。
特定于版本的详细信息的规定可以直接在规范中提供,也可以通过委托给相关 Rust 团队拥有的其他文档来间接提供。
渐进式开发
既要为当前和未来的 Rust 版本提供规范性约束,又要描述当前 Rust 版本的细节。因此该团队决定将通过迭代和渐进的方式最大限度地提高其工作价值。
我们预计该规范的早期版本将重点关注提供当前 Rust 版本的详细描述。这样的规范可以从现有的工作成果(如 Ferrocene 规范)中衍生出来,因为该规范明确侧重于提供特定 Rust 版本的详细说明。对这些特定版本描述的反馈意见将帮助我们了解如何以最佳方式在规范中制定规范性约束。
由于我们前面提到的对当前 Rust 版本的关注,规范的早期版本可能会有一些空白,其中规定的界限比必要的更加不精确。例如,规定“不安全的 Rust 代码可能会导致未定义的行为”没有提供有关如何编写定义良好的不安全代码的指导。即使存在这种不精确性,规定的界限仍然可以提供有用的高级保证(例如“安全的 Rust 不会导致未定义的行为”)。规范的未来版本会添加更多说明性细节(例如“不安全的 Rust 代码在以下条件下不会导致未定义的行为:……”),直到我们达到所需的精度级别。
范围
规范应至少涵盖 Rust 语法和语义的以下领域某些部分可能与特定后端或目标实现技术(如 inline asm)有内在联系。
- Rust 的语法,通过 Backus-Naur Form (BNF) 或 BNF 的一些合理扩展来指定。
- Macro expansion
- Macro-by-example (
macro_rules
) transcription; Hygiene cfg
属性- Procedural macros; attributes 以及 derive
- Macro-by-example (
- 路径和标识符解析
- Modules
- 静态语义
- 类型定义;类型表达式;布局
- 类型推断和类型检查;子类型化
- 生命周期和借用检查
- 泛型;关联项解析和 Trait solving
- 安全 Rust 的操作语义
- 绑定表格;匹配表达式;drop glue
- 值的移动和复制;借用
- field projection; method dispatch
- operator overloading
- 不安全 Rust 的操作语义
- memory model
- inline assembly
- Const evaluation
- Crates 和 crate linkage
此列表可随着时间的推移而扩展。
Presentation
Rust 规范将是一个可公开访问的文档,类似于所有其他 Rust 文档(并具有相同的许可条款)。文本将以英语编写,并且仅使用规范本身定义的技术术语或在免费在线词典中具有明确定义的技术术语。
规范中的各个项目都可以被引用和命名:不仅可以在超链接中,而且在文本中(例如“[syntax.patterns.arm.5]”)。在可能的情况下,这些名称/项目引用应在不同版本的规范中持续存在。
规范的迭代应包括突出显示版本之间差异的 renderings。(参见 Ada 参考手册等。)
Rust 规范将以鼓励志愿者贡献的格式进行维护,即使规范团队预计必须对每个贡献进行重新授权,以保持规范的一致性。
虽然完整性和正确性是首要任务,但团队将尽力使规范尽可能易于理解。理想情况下,任何 Rust 程序员都应该能够深入研究并找到他们可能遇到的任何语言问题的答案,而无需询问已经非常熟悉该文档的“language lawyer”。
发布节奏
Rust 发布将独立于规范审批流程进行。
如果给定版本的规范尚未获得批准,则该版本将在没有相关规范的情况下发布。(不过,该团队可能会在后续提供与给定版本相关的规范。)
这是设计使然。规范工作不得为项目增加需要克服的新障碍,以履行其现有义务,例如 6 周的发布周期。
团队愿景是最终能够达到自动交付更新规范的程度,并且能够按照项目的 6 周发布节奏完成。但是,从短期和中期来看,其希望能够自由地滞后于 6 周的发布节奏。当规范团队为以前未涉及的领域逐步添加新内容,或大幅缩小当前版本规范的规定范围时,滞后于 Rust 发布计划的能力可能会特别有用。
虽然规范开发过程不会阻止发布,但语言功能的更改应与规范的相关更新相结合。一旦开始发布与特定版本相关的规范,那么如果没有规范团队批准对当前草案规范的相应拉取请求,则对当前规范中记录的语言功能的更改就无法稳定。规范中未记录的语言功能的更改可以在不更新规范的情况下稳定下来,但需要规范团队成员确认相应的功能未记录。
通过强制执行新功能在稳定之前必须成为规范的一部分的规则,有望消除规范与 Rust 版本之间潜在滞后的主要根源。
下一步
- 为团队制定定期会议时间表。
- 确定利益相关者名单。
- 制作第一个“demo product”,供利益相关者审查。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
新一代基于 mybatis 的 orm 1.1.2 发布
mybatis-mp是基于mybatis实现的一款orm框架,可以大大的简化sql操作的复杂度,具有丰富的api,例如多表join,多表返回,数据库函数支持;内置分页功能,以及sql优化(超强) 访问 gitee 地址:https://gitee.com/mybatis-mp 此次更新内容,以下几点: 1、添加乐观锁功能 2、增加ID自增器、分布式ID 3、优化ID自增代码 4、添加IFNLL函数
- 下一篇
BI 数据可视化平台建设(2)—筛选器组件升级实践
作者:vivo 互联网大数据团队-Wang Lei 本文是vivo互联网大数据团队《BI数据可视化平台建设》系列文章第2篇 -筛选器组件。 本文主要介绍了BI数据可视化平台建设中比较核心的筛选器组件, 涉及组件分类、组件库开发等升级实践经验,通过分享一些对交互和业务耦合度高的组件开发迭代的思考,希望可以给正在做组件重构解耦的读者带来启发。 往期系列文章: BI 数据可视化平台建设(1)—交叉表组件演变实战 一、引言 BI产品通常包含大量复杂的数据信息,需要对其进行快速和准确的处理和分析。筛选器可以帮助BI产品的用户快速地定位所需信息,并从海量数据中筛选出有用的数据,以便进行深入的分析和决策。敏捷BI作为公司内部用户数最多的可视化平台,随着平台的业务增长和版本迭代,其筛选器功能也越来越丰富和完善,旧的设计架构也显得越来越臃肿且难以维护,为了提高筛选器使用的稳定性和降低后续迭代维护成本,筛选器的架构升级已经不可避免了,本文主要给大家介绍一下筛选器组件的架构升级实践经验。 二、前期设计 2.1 组件选型 前期筛选器组件的职责和交互比较简单,主要是对图表数据进行单向的数据过滤,并没有应用到其他...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Mario游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能