Мы рады объявить новую версию Rust, 1.7. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.
Как всегда, вы можете установить Rust 1.7 с соответствующей страницы официального сайта, а также посмотреть подробный список изменений для версии 1.7 на Github. Этот релиз включил в себя 1300 патчей.
Что вошло в стабильную версию 1.7
Этот релиз в основном нацелен на библиотеки. Хотя у нас есть несколько возможностей языка, которые мы готовим для будущих релизов, период, в который была разработана версия 1.7, включал праздники, поэтому люди меньше проводили время в комментариях на GitHub и вместо этого уделяли внимание близким.
Стабилизация библиотек
Примерно 40 библиотечных функций и методов стабилизировано в 1.7. Один из крупнейших стабилизированных API — поддержка пользовательских алгоритмов хэширования в стандартном HashMap<K, V>
. Раньше все хэш-словари использовали SipHash в качестве алгоритма хэширования, что обеспечивало защиту от DoS-атак по умолчанию. Однако, SipHash не очень быстр при хэшировании маленьких ключей. Алгоритм FNV гораздо быстрее для таких аргументов. Это означает, что изменение алгоритма хэширования для типов вроде HashMap<usize, V>
может дать значительный прирост производительности, если вам
не нужна защита от DoS.
Чтобы увидеть это на примере, вы можете взять контейнер fnv на 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
безразличен к конкретному алгоритму хэширования, поэтому никаких изменений в типах, хранимых в HashMap
, не нужно!
Другие заметные улучшения включают:
<[T]>::clone_from_slice()
, эффективный способ копировать данные из одного среза в другой.- Различные методы на
Ipv4Addr
иIpv6Addr
для удобства, вродеis_loopback()
, который возвращаетtrue
илиfalse
в зависимости от того, является ли адрес петлевым (loopback address), как описано в RFC 6890. - Различные улучшения в типе
CString
, используемом в FFI. - Арифметические операции с проверками, с насыщением, или с переполнением. Они не учтены в тех сорока стабилизированных методах, которое мы привели выше. Их очень много, но они все делают одно и то же.
Подробнее смотрите замечания к выпуску.
Возможности Cargo
Сделано несколько небольших изменений в Cargo:
- Сборочные скрипты были [улучшены][improvement to build scripts], и теперь они могут точно информировать Cargo о зависимостях. Благодаря этому они выполняются заново только когда эти файлы изменяются.
- [Изменение подкоманды
cargo rustc
][modification to thecargo rustc
subcommand] позволяет указать профиль, согласно которому должны браться зависимости времени разработки (dev-dependencies) во время тестирования и т.д.
Участники версии 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
Автор: mkpankov