Rust 团队很高兴宣布 Rust 的最新版本 1.7。Rust 是一种系统编程语言,专注于安全、速度和并发。
与往常一样,您可以从我们网站上的相应页面安装 Rust 1.7,并在 GitHub 上查看1.7 的详细发行说明。此版本中已合并了大约 1300 个补丁。
1.7 稳定版中的内容
此版本主要关注库功能。虽然我们正在为未来的版本准备一些语言功能,但 1.7 开发的时间范围包括假期,这意味着在 GitHub 上进行评论的时间更少,而与亲人共度的时间更多。
库稳定化
在 1.7 中,大约 40 个库函数和方法现在已稳定。其中一个最大的稳定 API 是对标准库中 HashMap<K, V>
类型中的自定义哈希算法的支持。以前,所有哈希映射都使用SipHash 作为哈希算法,默认情况下提供针对 DOS 攻击的保护。但是,SipHash 在对小键进行哈希时速度并不快。但是,正如所示,FNV 哈希算法 对这些大小的输入速度快得多。这意味着,通过为 HashMap<usize, V>
等类型切换哈希算法,只要可以接受丢失 DOS 保护,就可以显着提高速度。
要查看实际效果,您可以查看 fnv crate(位于 crates.io 上)并通过以下方式创建 HashMap
:
extern crate fnv;
use std::collections::HashMap;
use std::hash::BuildHasherDefault;
use fnv::FnvHasher;
type MyHasher = BuildHasherDefault<FnvHasher>;
fn main() {
let mut map: HashMap<_, _, MyHasher> = HashMap::default();
map.insert(1, "Hello");
map.insert(2, ", world!");
println!("{:?}", map);
}
请注意,大多数情况下,您甚至不需要指定哈希器,因为类型推断会处理它,因此 HashMap::default()
应该是您获得高达 2 倍更快哈希所需的一切。还值得指出的是,Hash
特性与使用的哈希算法无关,因此不需要对插入哈希映射中的类型进行任何更改即可获得好处!
其他值得注意的改进包括
<[T]>::clone_from_slice()
,一种将数据从一个切片复制到另一个切片的高效方法。Ipv4Addr
和Ipv6Addr
上的各种便利方法,例如is_loopback()
,它根据 RFC 6890 返回地址是否为环回地址的true
或false
。- 对
CString
(用于 FFI)的各种改进。 - 各种数值类型的检查、饱和和溢出操作。这些不计入上面的“40”个数字,因为它们有很多,但它们都做同样的事情。
有关更多信息,请参阅详细的发行说明。
Cargo 功能
Cargo 有几个小的更新
- 对构建脚本的改进,允许它们准确地告知 Cargo 依赖项,以确保它们仅在这些文件更改时重新运行。这应该在包含构建脚本的存储库中对开发有所帮助。
- 对
cargo rustc
子命令的修改,它允许指定配置文件以在测试等过程中引入开发依赖项。
1.7 的贡献者
我们有 144 个人为 1.7 做出了贡献。非常感谢!
- Aaron Turon
- Adam Perry
- Adrian Heine
- Aidan Hobson Sayers
- Aleksey Kladov
- Alexander Lopatin
- Alex Burka
- Alex Crichton
- Ali Clark
- Amanieu d’Antras
- Andrea Bedini
- Andrea Canciani
- Andre Bogus
- Andrew Barchuk
- Andrew Paseltiner
- angelsl
- Anton Blanchard
- arcnmx
- Ariel Ben-Yehuda
- arthurprs
- ashleysommer
- Barosl Lee
- Benjamin Herr
- Björn Steinbrink
- bors
- Brandon W Maister
- Brian Anderson
- Brian Campbell
- Carlos E. Garcia
- Chad Shaffer
- Corey Farwell
- Daan Sprenkels
- Daniel Campbell
- Daniel Robertson
- Dave Hodder
- Dave Huseby
- dileepb
- Dirk Gadsden
- Eduard Burtescu
- Erick Tryzelaar
- est31
- Evan
- Fabrice Desré
- fbergr
- Felix Gruber
- Felix S. Klock II
- Florian Hahn
- Geoff Catlin
- Geoffrey Thomas
- Georg Brandl
- ggomez
- Gleb Kozyrev
- Gökhan Karabulut
- Greg Chapple
- Guillaume Bonnet
- Guillaume Gomez
- Ivan Kozik
- Jack O’Connor
- Jeffrey Seyfried
- Johan Lorenzo
- Johannes Oertel
- John Hodge
- John Kåre Alsaker
- Jonas Schievink
- Jonathan Reem
- Jonathan S
- Jorge Aparicio
- Josh Stone
- Kamal Marhubi
- Katze
- Keith Yeung
- Kenneth Koski
- Kevin Stock
- Luke Jones
- Manish Goregaokar
- Marc Bowes
- Marvin Löbel
- Masood Malekghassemi
- Matt Brubeck
- Mátyás Mustoha
- Michael Huynh
- Michael Neumann
- Michael Woerister
- mitaa
- mopp
- Nathan Kleyn
- Nicholas Mazzuca
- Nick Cameron
- Nikita Baksalyar
- Niko Matsakis
- NODA, Kai
- nxnfufunezn
- Olaf Buddenhagen
- Oliver ‘ker’ Schneider
- Oliver Middleton
- Oliver Schneider
- Pascal Hertleif
- Paul Dicker
- Paul Smith
- Peter Atashian
- Peter Kolloch
- petevine
- Pierre Krieger
- Piotr Czarnecki
- Prayag Verma
- qpid
- Ravi Shankar
- Reeze Xia
- Richard Bradfield
- Robin Kruppe
- rphmeier
- Ruud van Asseldonk
- Ryan Thomas
- Sandeep Datta
- Scott Olson
- Scott Whittaker
- Sean Leffler
- Sean McArthur
- Sebastian Hahn
- Sebastian Wicki
- Sébastien Marie
- Seo Sanghyeon
- Sergey Veselkov
- Simonas Kazlauskas
- Simon Sapin
- Stepan Koltsov
- Stephan Hügel
- Steve Klabnik
- Steven Allen
- Steven Fackler
- Tamir Duberstein
- tgor
- Thomas Wickham
- Thomas Winwood
- Tobias Bucher
- Toby Scrace
- Tomasz Miąsko
- tormol
- Tshepang Lekhonkhobe
- Ulrik Sverdrup
- Vadim Petrochenkov
- Vincent Esche
- Vlad Ureche
- Wangshan Lu
- Wesley Wiser