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