Rust 团队很高兴地宣布 Rust 的最新版本 1.8 发布。Rust 是一种专注于安全性、速度和并发性的系统编程语言。
与往常一样,您可以从我们网站上的相应页面安装 Rust 1.8,并查看 GitHub 上1.8 的详细发行说明。此版本中合并了大约 1400 个补丁。
1.8 稳定版的新特性
Rust 1.8 中有两个新特性,并且对于 Windows 用户来说也有好消息!此外,我们正在努力用基于 Cargo 的构建系统替换我们基于 make
的构建系统。
第一个特性是,各种“运算符等于”运算符,例如 +=
和 -=
,现在可以通过各种 trait 进行重载。 此更改在 RFC 953 中被接受,其形式如下:
use std::ops::AddAssign;
#[derive(Debug)]
struct Count {
value: i32,
}
impl AddAssign for Count {
fn add_assign(&mut self, other: Count) {
self.value += other.value;
}
}
fn main() {
let mut c1 = Count { value: 1 };
let c2 = Count { value: 5 };
c1 += c2;
println!("{:?}", c1);
}
这将打印出 Count { value: 6 }
。 与其他运算符 trait 一样,关联类型允许您在运算符的每一侧使用不同的类型。 有关更多详细信息,请参阅 RFC。
第二个特性非常小,来自 RFC 218。 在 Rust 1.8 之前,没有字段的 struct
没有大括号:
struct Foo; // works
struct Bar { } // error
第二种形式不再是错误。 最初不允许这样做是为了与其他空声明保持一致,以及为了解决解析歧义。 但是,在 1.0 之后的 Rust 中,这种歧义是不存在的。 宏作者由于需要特殊情况而看到了额外的复杂性。 最后,进行活跃开发的用户有时会在 struct 的空版本和非空版本之间切换,而额外的工作和差异并不理想。
在 Windows 方面,32 位 MSVC 构建现在实现了展开。 这将 i686-pc-windows-msvc
提升到 Tier 1 平台。
最后,我们使用 make
来构建 Rust 已经很长时间了。 然而,我们已经有一个很棒的工具来构建 Rust 程序:Cargo。 在 Rust 1.8 中,对新的构建系统(用 Rust 编写并基于 Cargo)的初始支持已落地。 它还不是默认设置,而且还有很多工作要做。 一旦完全完成,我们将在发行说明中对此进行更多讨论,目前,请阅读 GitHub 问题以了解更多详细信息。
库的稳定化
大约 20 个库函数和方法现在在 1.8 中是稳定的。 主要有三大类更改:与 UTF-16 相关的字符串方法、与时间相关的各种 API 以及语言部分中提到的运算符重载所需的各种 trait。
有关更多信息,请参阅详细发行说明。
Cargo 功能
Cargo 有一些更新
cargo init
可用于在当前工作目录中启动 Cargo 项目,而不是像cargo new
那样创建一个新的子目录。cargo metadata
是另一个用于获取项目元数据的新子命令。.cargo/config
现在具有-v
和--color
的键- Cargo 具有特定于目标的依赖项的功能得到了增强。
有关更多信息,请参阅详细发行说明。
1.8 的贡献者
我们有 126 位个人为 1.8 做出了贡献。 非常感谢!
- Aaron Turon
- Abhishek Chanda
- Adolfo Ochagavía
- Aidan Hobson Sayers
- Alan Somers
- Alejandro Wainzinger
- Aleksey Kladov
- Alex Burka
- Alex Crichton
- Amanieu d'Antras
- Andrea Canciani
- Andreas Linz
- Andrew Cantino
- Andrew Horton
- Andrew Paseltiner
- Andrey Cherkashin
- Angus Lees
- arcnmx
- Ariel Ben-Yehuda
- ashleysommer
- Benjamin Herr
- Валерий Лашманов
- Björn Steinbrink
- bors
- Brian Anderson
- Brian Bowman
- Christian Wesselhoeft
- Christopher Serr
- Corey Farwell
- Craig M. Brandenburg
- Cyryl Płotnicki-Chudyk
- Daniel J Rollins
- Dave Huseby
- David AO Lozano
- David Henningsson
- Devon Hollowood
- Dirk Gadsden
- Doug Goldstein
- Eduard Burtescu
- Eduard-Mihai Burtescu
- Eli Friedman
- Emanuel Czirai
- Erick Tryzelaar
- Evan
- Felix S. Klock II
- Florian Berger
- Geoff Catlin
- ggomez
- gohyda
- Gökhan Karabulut
- Guillaume Gomez
- ituxbag
- James Miller
- Jeffrey Seyfried
- John Talling
- Jonas Schievink
- Jonathan S
- Jorge Aparicio
- Joshua Holmer
- JP Sugarbroad
- Kai Noda
- Kamal Marhubi
- Katze
- Kevin Brothaler
- Kevin Butler
- Manish Goregaokar
- Markus Westerlind
- Marvin Löbel
- Masood Malekghassemi
- Matt Brubeck
- Michael Huynh
- Michael Neumann
- Michael Woerister
- mitaa
- Ms2ger
- Nathan Kleyn
- nicholasf
- Nick Cameron
- Niko Matsakis
- Noah
- NODA, Kai
- Novotnik, Petr
- Oliver Middleton
- Oliver Schneider
- petevine
- Philipp Oppermann
- pierzchalski
- Piotr Czarnecki
- pravic
- Pyfisch
- Richo Healey
- Ruud van Asseldonk
- Scott Olson
- Sean McArthur
- Sebastian Wicki
- Sébastien Marie
- Seo Sanghyeon
- Simonas Kazlauskas
- Simon Sapin
- srinivasreddy
- Steve Klabnik
- Steven Allen
- Steven Fackler
- Stu Black
- Tang Chenglong
- Ted Horst
- Ticki
- tiehuis
- Tim Montague
- Tim Neumann
- Timon Van Overveldt
- Tobias Bucher
- Tobias Müller
- Todd Lucas
- Tom Tromey
- Tshepang Lekhonkhobe
- ubsan
- Ulrik Sverdrup
- Vadim Petrochenkov
- vagrant
- Valentin Lorentz
- Varun Vats
- vegai
- vlastachu
- Wangshan Lu
- York Xiang