Rust 团队很高兴地宣布 Rust 的最新版本 1.10。Rust 是一门专注于安全性、速度和并发性的系统编程语言。
一如既往,你可以在我们网站的相应页面上安装 Rust 1.10,并在 GitHub 上查看 1.10 的详细发布说明。此版本共合入了 1276 个补丁。
1.10 稳定版的新特性
Rust 1.10 包含了 Rust 中最受欢迎的功能之一:通过 -C panic=abort 标志或在 Cargo.toml 中的设置,当发生 panic! 时,程序会终止而不是展开(unwind)。为什么会想要这样做?请记住 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。这通常被称为“自举”(bootstrapping)。历史上,我们通过“快照”特定版本的编译器来实现自举,并始终从此版本进行自举;快照会根据需要定期更新。此外,由于 Rust 编译器使用了不稳定的 Rust 功能,为了构建稳定版编译器,你需要一个特定的 nightly 版本 Rust 编译器。这种方式服务了我们多年,但现在我们已经不再适用它了。这种方法的主要缺点是它需要下载一个快照二进制文件,这对于一个重要的群体来说并不理想:Linux 发行版。特别是,发行版通常希望能够仅使用他们之前打包的版本来构建最新版本的 Rust,而不是通过不受信任的二进制文件。因此,我们修改了构建系统,使 Rust 1.10 使用 Rust 1.9 构建。将来,这种模式将继续下去;Rust 1.11 将使用 Rust 1.10 构建。此外,你还可以使用稳定版编译器来构建编译器。这简化了自举过程中的一切,并显著帮助了发行版维护者,因为他们不再需要两个软件包。你可以在 其拉取请求 中找到有关此更改的更多详细信息。
有关更多信息,请参阅 详细发布说明。
库稳定化
此版本中约有 70 个 API 被稳定。它们大致分为以下几组:
std::os::windows::fs::OpenOptionsExt,用于 Windows 特定的文件操作。- 能够使用
std::panic::{set,take}_hook注册和注销 panic hook。 CStr::from_bytes_with_nul,用于从字节切片创建CStr(以及一个不检查的版本)。std::fs::Metadata的小改进。- 各种原子类型的
compare_exchange. - 通过
std::os::unix::net::{UnixStream, UnixListener, UnixDatagram, SocketAddr}提供的许多 UNIX 特定的网络功能。
此外,Default 为 &CStr, CString, UnsafeCell, fmt::Error, Condvar, Mutex 和 RwLock 实现了。
最后,在 Linux 上,如果 HashMap 无法使用 getrandom 初始化,它们会 暂时回退到 /dev/urandom,以避免在早期启动时阻塞。
有关更多信息,请参阅 详细发布说明。
Cargo 特性
此版本中,Cargo 获得了一些小的改进。
- 上述
profile.*.panic选项可以控制你的项目如何实现 panic。 - Cargo 现在 将其状态报告到 stderr 而不是 stdout。
- Rust 关键字现在 禁止用作 crate 名称。
- 已将
--force标志 添加到cargo install。 cargo test现在接受--doc标志,用于仅运行文档测试。- 添加了
cargo --explain,与rustc --explain类似。
有关更多信息,请参阅 详细发布说明。
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