宣布 Rust 1.0 Alpha 版本

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

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

此版本标志着 Rust 及其社区的一个重要里程碑。

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

  • 核心库已为 1.0 版本完成所有功能。API 约定已牢固建立,核心功能(基本类型、特征、数据结构和并发原语)已全部 稳定。同样,我们预计在 1.0 版本之前不会进行重大更改。

Rust 社区真的撸起袖子,帮助推动此版本发布;感谢所有参与的人,尤其是 树的朋友

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

Alpha 阶段会发生什么?

如果您已经是 Rust 用户,您在 Alpha 阶段会注意到的一件事是,重大更改的步伐会大幅下降。

大多数将在 Rust 1.0 中发布的功能和模块都已到位,并且在此阶段只会以有限的方式更改,如本文后面所述。只有几个模块(关键模块是路径操作和 I/O)仍在稳定中。

我们需要您的帮助,在 Beta 版本发布之前迭代这些最终库,并解决我们已经标记为稳定的 Rust 部分中存在的任何剩余问题。在 Alpha 阶段,我们建议使用 nightly 版本,这些版本将随着这些 API 的最终成型而不断发展。

Alpha 版本是我们 过渡稳定性保证的一部分。虽然我们还没有准备好提供完整的稳定性保证,但此发布周期使我们更接近 1.0 目标。当 1.0-beta1 版本 六周后 发布时,这些重要的剩余 API 将稳定。在 Beta 版本上编译的代码也应该在 1.0 正式版上以最小的更改进行编译。

Alpha 版本中有哪些内容?

上一个版本 以来,我们取得了巨大的进步。我们将在本文中介绍一些亮点;完整的详细信息可以在 发行说明 中找到。

语言功能

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

  • 多重分派特征:特征实现现在可以通过 多种类型(不仅仅是 Self)进行选择,这为 许多 有趣 API 打开了大门。由 Niko Matsakis 实现;由 Jorge Aparicio 和 Aaron Turon 推出。

  • 关联类型:特征现在可以具有 关联类型,这减少了泛型中的冗长,并有助于类型推断。由 Patrick Walton、Niko Matsakis 和 Nick Cameron 实现;由 Jorge Aparicio 推出。

  • Where 子句:作为一种强大的新方法来指定特征边界,Where 子句 已落地,并在标准库中实现了一些 重大 简化由 Niko Matsakis、Patrick Walton 和 Jared Roesch 实现;由 Jorge Aparicio 和 Aaron Turon 推出。

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

  • 宏:macro_rules 系统已 显著 修改,以多种方式清理了许多粗糙的边缘并防范未来问题。虽然宏存在一些重大缺陷,但宏系统是 Rust 编程中一个强大且重要的部分,它将与 1.0 版本一起发布。我们计划在 1.0 版本发布后构建第二代宏系统。由 Keegan McAllister 和 Corey Richardson 实现。

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

  • 选择加入内置特征:Rust 用于将数据分类为可复制、线程安全等的标记特征已 经过重大重构,以获得更安全、更可预测的默认值由 Patrick Walton 和 Flavio Percoco Premoli 实现。

所有这些语言功能都已在整个标准库中推出。

库功能

  • 一致的约定:一个 大型 数量 约定 RFC 已获批准,并在 Rust 指南 中进行了总结;这些约定已在 std 的所有 #[stable] 部分中推出。由 Aaron Turon 领导。

  • 稳定的核心类型和特征:所有原始类型和基本构建块(如 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 比以前的版本更高效且更符合习惯用法,并且大多数 API 已经 #[stable]由 Alex Crichton 和 Aaron Turon 实现。

  • 运行时自由:Rust 的运行时系统和绿色线程模型已 完全删除,这将“hello world”的静态二进制大小减少了一半,并且 标准库中的更低级别挂钩打开了大门。由 Aaron Turon 实现。

文档

  • Rust 编程语言:以前“指南”和“指南”之间的分裂已通过将它们合并为 “本书” 来纠正。由 Steve Klabnik 领导。

  • Rust by Example:精美的 https://rustbyexample.com/ Rust 入门现在是官方文档的一部分。由 Jorge Aparicio 发起。

  • 其他 API 文档:大量工作投入到改进 API 文档中,包括扩展概述文本并在整个文档中添加示例。感谢整个社区,他们不懈努力地改进这些文档。

还有哪些工作要做?

可以在 此处 找到对稳定功能/API 的可能重大更改的详细列表。以下是 Alpha 阶段主要改进领域列表。

  • 关联类型未装箱闭包 的改进:这两个功能都已投入使用,但我们计划在 Beta 阶段进行重大的人体工程学改进,例如 更复杂的捕获子句推断 以及对 X::Type 等简写形式的更统一支持

  • 对泛型的改进:我们将探索 途径,以减少当前所需的冗余特征边界数量。

  • 路径改革: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
  • [email protected]
  • 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