今天,我们很高兴地发布了 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 实现。 -
整数类型更改:关于整数类型的长期争论最近得到解决:
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]。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 更改:我们计划调整
Sync和Send标记的定义,以便线程可以共享堆栈数据。这可能会导致一些小的破坏性更改。 -
整数类型审计:在 alpha 周期内,我们将最终确定选择整数类型的正式约定,并重新审计这些类型在
std中的使用。此审计可能会对#[stable]API 造成一些破坏性更改。 -
所有特性的文档:一些近期添加的特性,例如关联类型和非装箱闭包,其唯一文档是 RFC。这些特性的用户文档将在 alpha 周期内添加。参考手册也将同样进行更新和改进。
-
完整的 API 文档:所有标记为稳定的内容在 beta 版本发布前都将至少包含用法示例,并有望包含完整的文字解释。
当然,我们将在整个 alpha 周期内继续修复错误并进行完善。
Rust 1.0.0-alpha 的贡献者
没有 Rust 热心社区的帮助,这个 alpha 版本不可能发布。感谢以下人员:
Aaron FrielAaron LiblongAaron TuronAaron WeissAdam SzkodaAdolfo OchagavíaAdrien TétarAidan CullyA.J. GardnerAkos KissAleksandr KoshloAlexander LightAlex CrichtonAlex GaynorAlexis BeingessnerAlex LyonAlfie JohnAndrea CancianiAndrew CannAndrew PaseltinerAndrew WagnerareskiAriel Ben-YehudaArtemArthur LiaoarturoAustin BonanderBarosl LeeBen FoppaBen GamariBen SBheesham PersaudBjörn SteinbrinkblussBoris EgorovborsBrandon SandersonBrendan ZabarauskasBrian AndersonBrian J BrennanBrian KoropoffCarol NicholsChase SouthwoodChris MorganChris WongClark GaebelCody P SchaferColin SherrattCorey FarwellCorey FordCorey RichardsoncrhinoCristi BurcăDamien RadtkeDan Burkertdan@daramos.comDaniel HofstetterDaniel MicayDan LuuDavid CreswickDavis SilvermanDiego GiagioDirk GadsdenDylan EdeEarl St SauverEduard BurtescuEduardo BautistaelszbenEric AllenEric KiddErick TryzelaarErwanFabrice DesréFakeKaneFalco HirschenbergerFelix RaimundoFelix S. Klock IIFlavio PercocoFlorian GilcherFlorian HahnFlorian WilkensgamazepsGil CottleGleb KozyrevGraham FawcettGuillaume PinotHuon WilsonIan ConnollyinrustwetrustIvan PetkovIvan UkhovJacob EdelmanJake GouldingJakub BukajJames MillerJared RoeschJarod LiuJashank JeremyJauhien PiatlickijbranchaudJeff ParsonsJelte FennemajfagerJim Applejmu303Johannes HoffJohannes MuenzelJohn AlbietzJohn GallagherJohn Kåre AlsakerJohn KleintJonathan ReemJonathan SJon HaddadJONNALAGADDA SrinivasJoonas JavanainenJorge AparicioJoseph CrailJoseph Rushton WakelingJosh HabermanJosh StoneJoshua YanovskijrincaycJulian OrthjuxiliaryjxvKang SeonghoonKasey CarrothersKeegan McAllisterKen TossellKevin BallardKevin MehallKevin YapklutzykulakowskiLaurence TrattLiigo ZhuangLionel FlandrinLuke MetzLuqman AdenManish GoregaokarMarkus SiemensMartin PoolMarvin LöbelMatej LachMathieu PoumeyrolMatt McPherrinMatt MurphyMatt WindsorMaxime QuandalleMaximilian HaackMaya NitumchaputmdingerMichael GehringMichael NeumannMichael SproulMichael WoeristerMike DilgerMike PedersenMike RobinsonMs2gerMukilan ThiyagarajanMurarthNafisNathan ZadoksNeil PankeyNicholas BishopNick CameronNick HowellNiels EgbertsNiko MatsakisNODA, KaiOGINO Masanorioli-obkOliver SchneiderolivrenP1startPascal HertleifPatrick WaltonPaul CollierPedro LarroyPeter AtashianPeter ElmersPhil DawesPhilip MunksgaardPhilipp GesangPiotr CzarneckiPiotr JawniakPiotr SzotkowskiqwitwaRaphael SpeyerRay ClananRichard DiamondRicho HealeyRicky TaylorrjzRobin GlosterRobin StockerRohit JoshiRolf TimmermansRolf van de KrolRoy CrihfieldRuud van AsseldonkSean CollinsSean GillespieSean Jensen-GreySean McArthurSean T AllenSeo SanghyeonSeth Pollacksheroze1123Simonas KazlauskasSimon SapinSimon WollwageSonStefan BucurStepan KoltsovSteve KlabnikSteven FacklerStuart PernsteinerSubhash BhushanTamir DubersteinTaylor Hutchisonth0114ndthiagopntsTimon RappTitouan VervackTobias BucherTom JakubowskitshakahTshepang LekhonkhobeUlysse CarionUtkarsh KukretiVadim ChugunovVadim PetrochenkovValerii HioraVictor BergerVictor van den ElzenViktor Dahlville-hVitali HaravyVladimir MatveevVladimir SmolawewhataloadofwhatYawarRaza7349York XiangZbigniew SiciarzZiad Hatahet