今天,我们很高兴地 发布 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 实现。 -
整数类型更改:关于整数类型的长期争论 最近得到解决:
int
和uint
现在分别称为isize
和usize
,不再暗示在 Rust 中“默认整数”的作用。感谢整个社区的热烈讨论。 -
选择加入内置特征:Rust 用于将数据分类为可复制、线程安全等的标记特征已 经过重大重构,以获得更安全、更可预测的默认值。由 Patrick Walton 和 Flavio Percoco Premoli 实现。
所有这些语言功能都已在整个标准库中推出。
库功能
-
一致的约定:一个 大型 数量 的 约定 RFC 已获批准,并在 Rust 指南 中进行了总结;这些约定已在
std
的所有#[stable]
部分中推出。由 Aaron Turon 领导。 -
稳定的核心类型和特征:所有原始类型和基本构建块(如
char
、String
、Vec
、Box
、Arc
、RefCell
等)现在都是#[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 更改:我们计划调整
Sync
和Send
标记的定义,以便 线程可以共享堆栈数据。这可能会导致一些小问题。 -
整数类型审核:在 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