Rust 团队很高兴地宣布 Rust 的最新版本 1.7。Rust 是一种专注于安全、速度和并发的系统编程语言。
和往常一样,您可以从我们网站的相应页面安装 Rust 1.7,并查看 GitHub 上1.7 的详细发行说明。此版本中大约合并了 1300 个补丁。
1.7 稳定版中的新功能
此版本主要关于库功能。虽然我们正在为未来的版本准备几个语言特性,但 1.7 的开发时间包括假期,这意味着在 GitHub 上评论的时间减少,而与亲人共度的时间增加。
库稳定化
大约 40 个库函数和方法现在在 1.7 中是稳定的。标准库的 HashMap<K, V>
类型中最大的稳定 API 之一是对自定义哈希算法的支持。以前,所有哈希映射都使用 SipHash 作为哈希算法,这提供了默认的防范 DOS 攻击的保护。然而,SipHash 在哈希小键时速度不是很快。 然而,正如所显示的,对于这些大小的输入,FNV 哈希算法要快得多。这意味着,只要可以接受失去 DOS 保护,通过为 HashMap<usize, V>
之类的类型切换哈希算法,就可以显着提高速度。
要查看实际效果,您可以在 crates.io 上查看 fnv crate 并通过以下方式创建 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
trait 与使用的哈希算法无关,因此不需要更改插入到哈希映射中的类型即可获得好处!
其他值得注意的改进包括:
<[T]>::clone_from_slice()
,一种高效地从一个切片复制数据并将其放入另一个切片的方法。Ipv4Addr
和Ipv6Addr
上的各种便捷方法,例如is_loopback()
,如果地址是根据 RFC 6890 的回环地址,则返回true
或false
。- 用于 FFI 的
CString
的各种改进。 - 各种数值类型的检查、饱和和溢出运算。这些不计入上面的“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