Rust 1.10 发布

2016 年 7 月 7 日 · Rust 核心团队

Rust 团队很高兴地宣布 Rust 的最新版本 1.10。Rust 是一种专注于安全性、速度和并发性的系统编程语言。

与往常一样,您可以从我们网站的相应页面安装 Rust 1.10,并查看 GitHub 上1.10 的详细发行说明。此版本共合并了 1276 个补丁。

1.10 稳定版的新功能

Rust 1.10 包含 Rust 中最受期待的功能之一:通过 -C panic=abort 标志Cargo.toml 中进行设置,当发生 panic! 时,它会中止而不是展开。为什么要这样做呢?请记住,panic 用于处理意外问题,对于许多应用程序来说,中止是一个合理的选择。使用中止,生成的代码更少,这意味着二进制文件的大小会稍微小一些,编译时间也会稍微快一些。一些粗略的数据是二进制文件小 10%,编译时间快 10%。此功能在 RFC 1513 中定义。

1.10 中的第二个重要功能是一种新的 crate 类型:cdylib。现有的 dylib 动态库格式现在将仅用于编写在 Rust 项目中使用的动态库,而 cdylib 将用于将 Rust 代码编译为嵌入到另一种语言中的动态库。在 1.10 版本中,编译器支持 cdylib,但 Cargo 尚不支持。此格式在 RFC 1510 中定义。

此外,编译器中实现了一些性能改进,并且在文档、rustdoc 本身以及各种错误消息中也实现了一些可用性改进

最后,我们开发 Rust 的方式发生了一个重大变化,这不会直接影响 Rust 用户,但会显著帮助那些分发 Rust 的人。Rust 是用 Rust 实现的,这意味着要构建 Rust 的副本,您需要一个 Rust 副本。这通常被称为“引导”。从历史上看,我们通过“快照”编译器的特定版本来做到这一点,并且始终从该快照进行引导;快照会根据需要定期更新。此外,由于 Rust 编译器使用不稳定的 Rust 功能,为了构建稳定编译器的副本,您需要特定 nightly 版本的 Rust 编译器。多年来,这种方式对我们来说效果很好,但我们现在已经超越了它。这种方法的主要缺点是它需要下载快照二进制文件,这对于一个重要的组成部分来说并不理想:Linux 发行版。特别是,发行版通常希望能够仅使用他们之前生成的已打包版本来构建最新版本的 Rust,而不是通过不受信任的二进制文件。因此,我们修改了我们的构建系统,以便 Rust 1.10 使用 Rust 1.9 构建。将来,这种模式将继续;Rust 1.11 将使用 Rust 1.10 构建。此外,您可以使用稳定编译器来构建编译器。这简化了围绕引导的一切,并显著帮助了发行版维护人员,因为他们不再需要两个软件包。您可以在其 pull request 中找到有关此更改的更多详细信息。

有关更多信息,请参阅详细发行说明

库的稳定化

在此版本中,大约有 70 个 API 被稳定化。它们大致分为以下几组

此外,为 &CStrCStringUnsafeCellfmt::ErrorCondvarMutexRwLock 实现了 Default

最后,在 Linux 上,如果无法使用 getrandom 初始化 HashMaps,它们将临时回退到 /dev/urandom 以避免在早期启动期间阻塞。

有关更多信息,请参阅详细发行说明

Cargo 功能

在此版本中,Cargo 收到了一些小的改进。

有关更多信息,请参阅详细发行说明

1.10 的贡献者

共有 139 位个人为 1.10 做出了贡献。非常感谢大家!

  • Adolfo Ochagavía
  • Alan Somers
  • Alec S
  • Alex Burka
  • Alex Crichton
  • Alex Ozdemir
  • Amanieu d'Antras
  • Andrea Canciani
  • Andrew Paseltiner
  • Andrey Tonkih
  • Andy Russell
  • Anton Blanchard
  • Ariel Ben-Yehuda
  • Barosl Lee
  • benaryorg
  • billyevans
  • Björn Steinbrink
  • bnewbold
  • bors
  • Brandon Edens
  • Brayden Winterton
  • Brian Anderson
  • Brian Campbell
  • Brian Green
  • c4rlo
  • Christopher Serr
  • Corey Farwell
  • Cristian Oliveira
  • Cyryl Płotnicki-Chudyk
  • Dan Fockler
  • Daniel Campoverde [alx741]
  • Dave Huseby
  • David Hewitt
  • David Tolnay
  • Deepak Kannan
  • Demetri Obenour
  • Doug Goldstein
  • Eduard Burtescu
  • Eduard-Mihai Burtescu
  • Ergenekon Yigit
  • Fabrice Desré
  • Felix S. Klock II
  • Florian Berger
  • Garrett Squire
  • Geordon Worley
  • Georg Brandl
  • ggomez
  • Gigih Aji Ibrahim
  • Guillaume Bonnet
  • Guillaume Gomez
  • Haiko Schol
  • Jake Goulding
  • James Miller
  • jbranchaud
  • Jeffrey Seyfried
  • jethrogb
  • jocki84
  • Johannes Oertel
  • Jonas Schievink
  • jonathandturner
  • Jonathan S
  • Jonathan Turner
  • JP Sugarbroad
  • Kaiyin Zhong
  • Kamal Marhubi
  • Kevin Butler
  • Léo Testard
  • Luca Bruno
  • Lukas Kalbertodt
  • Lukas Pustina
  • Luqman Aden
  • Manish Goregaokar
  • Marcus Klaas
  • mark-summerfield
  • Masood Malekghassemi
  • Matt Brubeck
  • Matt Kraai
  • Maxim Samburskiy
  • Michael Howell
  • Michael Tiller
  • Michael Woerister
  • mitaa
  • mrmiywj
  • Ms2ger
  • Murarth
  • Nerijus Arlauskas
  • Nick Cameron
  • Nick Fitzgerald
  • Nick Hamann
  • Nick Platt
  • Niko Matsakis
  • Oliver 'ker' Schneider
  • Oliver Middleton
  • Oliver Schneider
  • Patrick Walton
  • Pavel Sountsov
  • Philipp Matthias Schaefer
  • Philipp Oppermann
  • pierzchalski
  • Postmodern
  • pravic
  • Pyry Kontio
  • Raph Levien
  • Rémy Rakic
  • rkjnsn
  • Robert Habermeier
  • Robin Kruppe
  • Sander Maijers
  • Scott Olson
  • Sean Gillespie
  • Sébastien Marie
  • Seo Sanghyeon
  • silvo38
  • Simonas Kazlauskas
  • Simon Wollwage
  • Stefan Schindler
  • Stephen Mather
  • Steve Klabnik
  • Steven Burns
  • Steven Fackler
  • Szabolcs Berecz
  • Tamir Duberstein
  • Tang Chenglong
  • Taylor Cramer
  • Ticki
  • Timon Van Overveldt
  • Timothy McRoy
  • Tobias Bucher
  • Tobias Müller
  • Tomáš Hübelbauer
  • Tomoki Aonuma
  • Tshepang Lekhonkhobe
  • Ulrik Sverdrup
  • User
  • Vadim Chugunov
  • Vadim Petrochenkov
  • Val Vanderschaegen
  • Wang Xuerui
  • York Xiang