宣布 Rust 1.0 Alpha

2015 年 1 月 9 日 · Rust 核心团队

今天,我们很高兴地发布了 Rust 1.0 的 alpha 版本,这门系统编程语言专注于安全性、性能和并发性。

本次发布标志着 Rust 及其社区的一个重要里程碑

  • 该语言的 1.0 版本功能已全部完成。虽然我们在最终发布之前计划进行许多可用性改进,但所有 1.0 版本的语言特性现已到位,我们不期望对它们进行重大破坏性更改。

  • 核心库的 1.0 版本功能已全部完成。API 约定已牢固确立,核心功能——基本类型、trait、数据结构和并发原语——均已稳定。同样,我们不期望在 1.0 版本之前进行重大破坏性更改。

Rust 社区的成员们真正地卷起袖子,帮助将此版本推向终点;感谢所有参与者,特别感谢friends of the tree

虽然在过去四个月里我们取得了长足的进步,但在 Rust 达到 1.0 最终版本之前,还有很多工作要做。请继续阅读以了解更多信息。

在 alpha 周期会发生什么?

如果你已经是 Rust 用户,在 alpha 周期内你首先会注意到的是破坏性更改的发生速度显著下降。

将随 Rust 1.0 一同发布的绝大多数特性和模块已到位,在此周期内只会以有限的方式进行更改,详情将在本文稍后介绍。只有少数模块——主要是路径操作和 I/O——仍在稳定化中。

我们需要你的帮助,以便在 beta 版本发布之前对这些最终库进行迭代,并解决我们已标记为稳定的 Rust 部分中所有剩余的问题。在 alpha 周期内,我们建议使用每夜构建版本,这些版本会随着这些 API 最终定型而继续演变。

alpha 发布是我们向过渡稳定性保证的一部分。虽然我们尚未准备好提供完整的稳定性保证,但此发布周期使我们更接近 1.0 目标。当 1.0-beta1 六周后发布时,这些重要的剩余 API 将会稳定。在 beta 版本上编译的代码也应该能够在 1.0 最终版本上进行最小改动后编译。

alpha 版本包含哪些内容?

上一个版本以来,我们取得了巨大的进步。我们在此介绍其中一些亮点;完整详情请参见发布说明

语言特性

  • 动态大小类型 (DST):其大小仅在运行时已知的类型(例如数组切片和 trait 对象)现在已大体集成到语言中,包括与用户定义智能指针的基本集成。由 Nick Cameron 实现;由 Jorge Aparicio 推广。

  • 多重分派 trait:Trait 实现现在可以通过多种类型(而不仅仅是 Self)进行选择,这为许多有趣的API 铺平了道路。由 Niko Matsakis 实现;由 Jorge Aparicio 和 Aaron Turon 推广。

  • 关联类型:Trait 现在可以拥有关联类型,这减少了使用泛型时的冗长性,并有助于类型推断。由 Patrick Walton、Niko Matsakis 和 Nick Cameron 实现;由 Jorge Aparicio 推广。

  • Where 子句:一种强大的新方法用于指定 trait 约束,where 子句已落地,并在标准库中实现了一些显著的简化由 Niko Matsakis、Patrick Walton 和 Jared Roesch 实现;由 Jorge Aparicio 和 Aaron Turon 推广。

  • “非装箱”闭包:闭包现在只是使用 trait 系统的另一种方式,这需要添加高阶生命周期;这使得所有权以及选择静态或动态分派具有更大的灵活性。由 Patrick Walton、Brian Koropoff 和 Niko Matsakis 实现;由 Jorge Aparicio 推广。

  • 宏:macro_rules 系统已得到显著修订,清理了许多粗糙之处,并以多种方式为未来做好了准备。虽然宏系统存在一些明显的不足,但它是 Rust 编程中一个强大而重要的组成部分,将随 1.0 版本发布。我们计划在 1.0 版本发布后构建第二代宏系统。由 Keegan McAllister 和 Corey Richardson 实现。

  • 整数类型更改:关于整数类型的长期争论最近得到解决intuint 现在被称为 isizeusize,并且不再暗示在 Rust 中扮演“默认整数”的角色。感谢整个社区的热烈讨论。

  • 可选加入内置 trait:Rust 用于将数据分类为可复制、线程安全等的标记 trait 已显著重构,以提供更安全、更可预测的默认值由 Patrick Walton 和 Flavio Percoco Premoli 实现。

所有这些语言特性都已在整个标准库中推广。

库特性

  • 一致的约定:大量约定RFC已获批准主要概括在《Rust 指南》中;这些约定已在 std 中所有 #[stable] 部分推广。由 Aaron Turon 主导。

  • 稳定的核心类型和 trait:所有基本类型和构建块(如 charStringVecBoxArcRefCell 等)现已 #[stable]由 Aaron Turon、Alex Crichton、Brian Anderson、Brendan Zabarauskas 和 Huon Wilson 稳定。

  • 迭代器和集合:一系列 RFC实现,用于重塑和稳定集合 API;迭代器也已 #[stable]RFC 由 Aaron Turon 和 Alexis Beingessner 提出,与 Chase Southwood、Piotr Czarnecki、Félix Raimundo、Clark Gaebel 等人共同稳定。

  • 并发原语:Rust 的并发模块已进行了全面改革,包括线程本地存储同步原语和新的线程 API,该 API 即将允许子线程在其父线程的堆栈上共享数据。这些 API 比以前的版本更高效、更符合习惯,而且大多数已 #[stable]由 Alex Crichton 和 Aaron Turon 实现。

  • 运行时自由:Rust 的运行时系统和绿色线程模型已完全移除,这使得“hello world”静态二进制文件的大小减半,并为标准库的更低级钩子打开了大门由 Aaron Turon 实现。

文档

  • 《Rust 编程语言》:以前“The Guide”和“The guides”之间的分裂已通过将它们合并到“The book”中得到纠正。由 Steve Klabnik 主导。

  • Rust By Example:精彩的 https://rustbyexample.com/ Rust 入门教程现已成为官方文档的一部分。由 Jorge Aparicio 发起。

  • 额外的 API 文档:已投入大量工作来改进 API 文档,包括扩展概述文本和在各处添加示例。这归功于整个社区,他们孜孜不倦地改进了这些文档。

还有哪些工作要做?

可以在此处找到针对稳定特性/API 可能发生的破坏性更改的详细列表。下面是 alpha 周期内的主要改进领域列表

  • 关联类型非装箱闭包的改进:这两个特性均已具备功能,但我们计划在 beta 周期内进行重要的工程改进,例如更复杂的捕获子句推断以及对诸如 X::Type 这样的速记符号提供更统一的支持

  • 对泛型的改进:我们将探索方法来减少当前所需的冗余 trait 约束数量。

  • 路径改革:path 模块将很快进行改革,以利用 DST,更好地解释平台差异,并与新 C++ 标准更紧密地对齐。实现工作已大体完成,推广应在 alpha 之后很快发生。

  • IO 改革:正在计划对IO API 进行全面改革;请加入讨论!这些更改将在整个 alpha 周期内陆续落地。

  • Sync/Send 更改:我们计划调整 SyncSend 标记的定义,以便线程可以共享堆栈数据。这可能会导致一些小的破坏性更改。

  • 整数类型审计:在 alpha 周期内,我们将最终确定选择整数类型的正式约定,并重新审计这些类型在 std 中的使用。此审计可能会对 #[stable] API 造成一些破坏性更改。

  • 所有特性的文档:一些近期添加的特性,例如关联类型和非装箱闭包,其唯一文档是 RFC。这些特性的用户文档将在 alpha 周期内添加。参考手册也将同样进行更新和改进。

  • 完整的 API 文档:所有标记为稳定的内容在 beta 版本发布前都将至少包含用法示例,并有望包含完整的文字解释。

当然,我们将在整个 alpha 周期内继续修复错误并进行完善。

Rust 1.0.0-alpha 的贡献者

没有 Rust 热心社区的帮助,这个 alpha 版本不可能发布。感谢以下人员:

  • Aaron Friel
  • Aaron Liblong
  • Aaron Turon
  • Aaron Weiss
  • Adam Szkoda
  • Adolfo Ochagavía
  • Adrien Tétar
  • Aidan Cully
  • A.J. Gardner
  • Akos Kiss
  • Aleksandr Koshlo
  • Alexander Light
  • Alex Crichton
  • Alex Gaynor
  • Alexis Beingessner
  • Alex Lyon
  • Alfie John
  • Andrea Canciani
  • Andrew Cann
  • Andrew Paseltiner
  • Andrew Wagner
  • areski
  • Ariel Ben-Yehuda
  • Artem
  • Arthur Liao
  • arturo
  • Austin Bonander
  • Barosl Lee
  • Ben Foppa
  • Ben Gamari
  • Ben S
  • Bheesham Persaud
  • Björn Steinbrink
  • bluss
  • Boris Egorov
  • bors
  • Brandon Sanderson
  • Brendan Zabarauskas
  • Brian Anderson
  • Brian J Brennan
  • Brian Koropoff
  • Carol Nichols
  • Chase Southwood
  • Chris Morgan
  • Chris Wong
  • Clark Gaebel
  • Cody P Schafer
  • Colin Sherratt
  • Corey Farwell
  • Corey Ford
  • Corey Richardson
  • crhino
  • Cristi Burcă
  • Damien Radtke
  • Dan Burkert
  • dan@daramos.com
  • Daniel Hofstetter
  • Daniel Micay
  • Dan Luu
  • David Creswick
  • Davis Silverman
  • Diego Giagio
  • Dirk Gadsden
  • Dylan Ede
  • Earl St Sauver
  • Eduard Burtescu
  • Eduardo Bautista
  • elszben
  • Eric Allen
  • Eric Kidd
  • Erick Tryzelaar
  • Erwan
  • Fabrice Desré
  • FakeKane
  • Falco Hirschenberger
  • Felix Raimundo
  • Felix S. Klock II
  • Flavio Percoco
  • Florian Gilcher
  • Florian Hahn
  • Florian Wilkens
  • gamazeps
  • Gil Cottle
  • Gleb Kozyrev
  • Graham Fawcett
  • Guillaume Pinot
  • Huon Wilson
  • Ian Connolly
  • inrustwetrust
  • Ivan Petkov
  • Ivan Ukhov
  • Jacob Edelman
  • Jake Goulding
  • Jakub Bukaj
  • James Miller
  • Jared Roesch
  • Jarod Liu
  • Jashank Jeremy
  • Jauhien Piatlicki
  • jbranchaud
  • Jeff Parsons
  • Jelte Fennema
  • jfager
  • Jim Apple
  • jmu303
  • Johannes Hoff
  • Johannes Muenzel
  • John Albietz
  • John Gallagher
  • John Kåre Alsaker
  • John Kleint
  • Jonathan Reem
  • Jonathan S
  • Jon Haddad
  • JONNALAGADDA Srinivas
  • Joonas Javanainen
  • Jorge Aparicio
  • Joseph Crail
  • Joseph Rushton Wakeling
  • Josh Haberman
  • Josh Stone
  • Joshua Yanovski
  • jrincayc
  • Julian Orth
  • juxiliary
  • jxv
  • Kang Seonghoon
  • Kasey Carrothers
  • Keegan McAllister
  • Ken Tossell
  • Kevin Ballard
  • Kevin Mehall
  • Kevin Yap
  • klutzy
  • kulakowski
  • Laurence Tratt
  • Liigo Zhuang
  • Lionel Flandrin
  • Luke Metz
  • Luqman Aden
  • Manish Goregaokar
  • Markus Siemens
  • Martin Pool
  • Marvin Löbel
  • Matej Lach
  • Mathieu Poumeyrol
  • Matt McPherrin
  • Matt Murphy
  • Matt Windsor
  • Maxime Quandalle
  • Maximilian Haack
  • Maya Nitu
  • mchaput
  • mdinger
  • Michael Gehring
  • Michael Neumann
  • Michael Sproul
  • Michael Woerister
  • Mike Dilger
  • Mike Pedersen
  • Mike Robinson
  • Ms2ger
  • Mukilan Thiyagarajan
  • Murarth
  • Nafis
  • Nathan Zadoks
  • Neil Pankey
  • Nicholas Bishop
  • Nick Cameron
  • Nick Howell
  • Niels Egberts
  • Niko Matsakis
  • NODA, Kai
  • OGINO Masanori
  • oli-obk
  • Oliver Schneider
  • olivren
  • P1start
  • Pascal Hertleif
  • Patrick Walton
  • Paul Collier
  • Pedro Larroy
  • Peter Atashian
  • Peter Elmers
  • Phil Dawes
  • Philip Munksgaard
  • Philipp Gesang
  • Piotr Czarnecki
  • Piotr Jawniak
  • Piotr Szotkowski
  • qwitwa
  • Raphael Speyer
  • Ray Clanan
  • Richard Diamond
  • Richo Healey
  • Ricky Taylor
  • rjz
  • Robin Gloster
  • Robin Stocker
  • Rohit Joshi
  • Rolf Timmermans
  • Rolf van de Krol
  • Roy Crihfield
  • Ruud van Asseldonk
  • Sean Collins
  • Sean Gillespie
  • Sean Jensen-Grey
  • Sean McArthur
  • Sean T Allen
  • Seo Sanghyeon
  • Seth Pollack
  • sheroze1123
  • Simonas Kazlauskas
  • Simon Sapin
  • Simon Wollwage
  • Son
  • Stefan Bucur
  • Stepan Koltsov
  • Steve Klabnik
  • Steven Fackler
  • Stuart Pernsteiner
  • Subhash Bhushan
  • Tamir Duberstein
  • Taylor Hutchison
  • th0114nd
  • thiagopnts
  • Timon Rapp
  • Titouan Vervack
  • Tobias Bucher
  • Tom Jakubowski
  • tshakah
  • Tshepang Lekhonkhobe
  • Ulysse Carion
  • Utkarsh Kukreti
  • Vadim Chugunov
  • Vadim Petrochenkov
  • Valerii Hiora
  • Victor Berger
  • Victor van den Elzen
  • Viktor Dahl
  • ville-h
  • Vitali Haravy
  • Vladimir Matveev
  • Vladimir Smola
  • we
  • whataloadofwhat
  • YawarRaza7349
  • York Xiang
  • Zbigniew Siciarz
  • Ziad Hatahet