Rust 1.0 Alpha 版发布

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

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

此版本标志着 Rust 及其社区的一个巨大里程碑

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

  • 核心库的 1.0 版本功能已完整。API 约定已牢固确立,核心功能(基本类型、trait、数据结构和并发原语)都已稳定。同样,我们预计在 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): 大小仅在运行时才知道的类型(例如数组切片和 trait 对象)现在已在很大程度上集成到语言中,包括与用户定义的智能指针的基本集成。由 Nick Cameron 实现;由 Jorge Aparicio 推出

  • 多重分发 trait: 现在可以通过多种类型(不仅仅是 Self)选择 trait 实现,这为许多有趣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]Aaron Turon 和 Alexis Beingessner 的 RFC,与 Chase Southwood、Piotr Czarnecki、Félix Raimundo、Clark Gaebel 等人一起稳定

  • 并发原语: Rust 的并发模块已经过全面改进,包括线程局部存储同步原语和一个新的线程 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