Rust 团队很高兴发布 Rust 的最新版本 1.14.0。Rust 是一种系统编程语言,专注于安全、速度和并发。
和往常一样,你可以从我们网站的相应页面安装 Rust 1.14.0,并在 GitHub 上查看 1.14.0 的详细发布说明。此版本共合入了 1230 个补丁。
1.14.0 稳定版有什么?
Rust 1.14 中最大的特性之一实际上不在语言或编译器本身:rustup 工具已经达到了 1.0 版本,现在是直接从项目官方安装 Rust 的推荐方式。rustup 不仅仅是安装 Rust
rustup 从官方发布渠道安装 Rust 编程语言,使你可以轻松地在 stable(稳定版)、beta(测试版)和 nightly(每夜构建版)编译器之间切换,并保持它们更新。它通过为常见平台提供标准库的二进制构建,简化了交叉编译。而且它运行在所有 Rust 支持的平台上,包括 Windows。
我们在五月份曾发表过一篇关于 Rustup 的文章。你可以在那里了解更多信息,或者在 GitHub 上查看它。
另一个令人兴奋的特性是实验性地支持将 WebAssembly 作为目标平台,即 wasm32-unknown-emscripten。目前还处于早期阶段,有很多 Bug 需要解决,所以请尝试使用并报告它们!为了让你初步了解它是如何工作的,安装 emscripten 后,将 Rust 代码编译到 WebAssembly 就像这样简单
社区一直在这一领域进行有趣、实验性的工作:可以看看 Jan-Erik 的幻灯片,了解他在 Rust Belt Rust 大会上举办的研讨会的一些示例,或者查看 Tim 关于经典 TodoMVC 项目的示例。这个实现基于他的 webplatform crate,它将 DOM 暴露给 Rust。
说到平台,大量平台获得了额外的支持
对于 rustc
mips-unknown-linux-gnumipsel-unknown-linux-gnumips64-unknown-linux-gnuabi64mips64el-unknown-linux-gnuabi64powerpc-unknown-linux-gnupowerpc64-unknown-linux-gnupowerpc64le-unknown-linux-gnus390x-unknown-linux-gnu
对于 std
arm-unknown-linux-musleabiarm-unknown-linux-musleabihfarmv7-unknown-linux-musleabihf
如果你正在使用这些平台之一,请按照网站上的说明安装,或者使用 rustup target add 命令将目标添加到现有安装中。
这些平台都属于“二级(tier 2)”支持,请查看我们的平台支持页面了解更多详情。
正如社区正在进行有关 WebAssembly 目标的有趣工作一样,在扩展 Rust 对上述列表之外目标的支持方面也有很棒的进展。xargo 允许轻松地将 Rust 交叉编译到裸机(bare-metal)目标。如果你正在用 Rust 编写操作系统,或者在微控制器上做一些有趣的事情,xargo 可以让你的工作轻松很多。
MIR 在过去几个版本中的落地意味着编译时间获得了一些改进,未来还会更多。
在语言方面,一个小改进已经落地:支持 RFC 1492。这个小小的补充允许你在更多地方使用 ..。以前,假设你有一个这样的结构体
在进行模式匹配的任何上下文中,你可以使用 .. 来忽略你不关心的部分。例如
let p = Point ;
match p
.. 忽略了 y 和 z。
考虑一个类似的 Point,但作为一个元组结构体(tuple struct)
;
以前,你可以使用 .. 忽略所有三个元素
let p = Point;
match p
但你不能只忽略元组(tuple)的一部分
let p = Point;
match p
这是一个不一致的地方,因此随着 RFC 1492 的稳定化,从本版本开始,代码可以正常编译。这适用于比元组(tuple)更多的场景;请参阅 RFC 了解更多详情。
标准库稳定化
标准库中增加了一些功能,但在本版本中它们没有明确的分类。以下是重点内容
- 没有参数的
println!()会打印一个换行符。以前需要一个空字符串才能实现相同效果。 Wrapping为引用实现了标准的二元和一元运算符,以及Sum和Product迭代器,使得这些类型的引用更容易使用。- 为
String实现From<Cow<str>>,为Vec<T>实现From<Cow<[T]>>。这些实现是合理的,但之前尚未添加。 - 扩展
.zip()特化到.map()和.cloned(),以提高性能。 - 为原子类型实现
RefUnwindSafe,因为这些类型是“展开安全(unwind safe)”的,尽管最初并不明显。 - 将
Vec::extend特化为Vec::extend_from_slice,以获得性能提升。 - 不再重用
HashMap的随机种子。这有助于缓解一种类型的 DDoS 攻击。 HashMap的内部内存布局对缓存更友好,显著提高了某些操作的性能- 为
Cow<str>实现Add<{str, Cow<str>}>。我们已经为其他字符串类型提供了Add支持,因此Cow上缺少它是不一致的。
查看详细发布说明了解更多信息。
Cargo 特性
至于 Cargo,RFC 1721 已得到实现。Cargo 现在会将 rustc --print cfg 打印的值传递给构建脚本。此特性的动机是,Cargo 现在可以在 MSVC 平台上编译用于静态链接 msvcrt 的目标文件。
Cargo 现在可以正确处理只读的 CARGO_HOME。
最后,Cargo 将忽略 test 和 bench 配置文件的 panic 配置。这很重要,因为测试运行器依赖于将 panic 视为失败的测试,所以如果设置了 panic=abort,一个失败的测试会导致整个测试套件中止。
查看详细发布说明了解更多信息。
1.14.0 贡献者
共有 144 位个人为 1.14.0 做出了贡献。非常感谢你们!
- Abhishek Chanda
- Adam Perry
- Ahmed Charles
- Aidan Hobson Sayers
- Aleksey Kladov
- Alexander von Gluck IV
- Alex Burka
- Alex Crichton
- Alex von Gluck IV
- Amanieu d'Antras
- Andrea Corradi
- Andrea Pretto
- Andreas Sommer
- Andre Bogus
- Andrew Paseltiner
- angelsl
- Anthony Ramine
- Ariel Ben-Yehuda
- arthurprs
- Austin Hicks
- bors
- Brian Anderson
- Bunts Thy Unholy
- CensoredUsername
- Chris McDonald
- Christopher
- christopherdumas
- Christopher Serr
- Cobrand
- Corey Farwell
- Cristi Cobzarenco
- Daan Sprenkels
- Danny Hua
- David Henningsson
- Devon Hollowood
- Dmitry Gritsay
- Dominik Inführ
- Duncan
- Eduard Burtescu
- Eduard-Mihai Burtescu
- Eric Roshan-Eisner
- est31
- Fabian Frei
- Federico Mena Quintero
- Felix S. Klock II
- Florian Diebold
- Florian Hartwig
- Florian Zeitz
- Frank Rehberger
- Gavin Baker
- Geoffry Song
- Guillaume Gomez
- iirelu
- James Miller
- Jan-Erik Rediger
- Jared Roesch
- Jeffrey Seyfried
- Jesus Garlea
- Jethro Beekman
- Joe Neeman
- Johannes Muenzel
- John Firebaugh
- John Hodge
- johnthagen
- Jonas Schievink
- Jonathan Turner
- Jorge Aparicio
- Josh Stone
- Josh Triplett
- Keegan McAllister
- Keith Yeung
- KillTheMule
- Konrad Borowski
- leonardo.yvens
- Liigo Zhuang
- loggerhead
- Manish Goregaokar
- Marcin Fatyga
- Mark-Simulacrum
- Martin Glagla
- Martin Thoresen
- Mathieu Borderé
- Mathieu Poumeyrol
- Matt Brubeck
- Matthew Piziak
- Matwey V. Kornilov
- mcarton
- Michael Woerister
- Mikhail Modin
- Mikko Rantanen
- msiglreith
- Nabeel Omer
- Nathan Musoke
- Nicholas Nethercote
- Nick Cameron
- Nick Fitzgerald
- Nick Stevens
- Nikhil Shagrithaya
- Niko Matsakis
- Oliver Middleton
- p512
- ParkHanbum
- Paul Lange
- Paulo Matos
- Paul Osborne
- Peter Atashian
- Peter N
- Philip Davis
- Pieter Frenssen
- Pweaver (Paul Weaver)
- pweyck
- QuietMisdreavus
- Raph Levien
- Razican
- Robin Stocker
- Ross Schulman
- Ryan Senior
- Scott Olson
- Seo Sanghyeon
- Simonas Kazlauskas
- Simon Sapin
- Srinivas Reddy Thatiparthy
- Stefan Schindler
- Stephen M. Coakley
- Steve Klabnik
- Steven Fackler
- Tamir Duberstein
- Taylor Cramer
- Tim Neumann
- Tobias Bucher
- Tomasz Miąsko
- tormol
- Tshepang Lekhonkhobe
- Ulrik Sverdrup
- Vadim Chugunov
- Vadim Petrochenkov
- Vadzim Dambrouski
- Vangelis Katsikaros
- Wang Xuerui
- Wesley Wiser
- Zack M. Davis
- Zoffix Znet
- Артём Павлов [Artyom Pavlov]
- 石博文