- PVSM.RU - https://www.pvsm.ru -
Мы рады объявить новую версию Rust, 1.7. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.
Как всегда, вы можете установить Rust 1.7 [1] с соответствующей страницы официального сайта, а также посмотреть подробный список изменений для версии 1.7 [2] на Github. Этот релиз включил в себя 1300 патчей.
Этот релиз в основном нацелен на библиотеки. Хотя у нас есть несколько возможностей языка, которые мы готовим для будущих релизов, период, в который была разработана версия 1.7, включал праздники, поэтому люди меньше проводили время в комментариях на GitHub и вместо этого уделяли внимание близким.
Примерно 40 библиотечных функций и методов стабилизировано в 1.7. Один из крупнейших стабилизированных API — поддержка пользовательских алгоритмов хэширования в стандартном HashMap<K, V>
. Раньше все хэш-словари использовали SipHash [3] в качестве алгоритма хэширования, что обеспечивало защиту от DoS-атак по умолчанию. Однако, SipHash не очень быстр [4] при хэшировании маленьких ключей. Алгоритм FNV [5] гораздо быстрее для таких аргументов. Это означает, что изменение алгоритма хэширования для типов вроде HashMap<usize, V>
может дать значительный прирост производительности, если вам
не нужна защита от DoS.
Чтобы увидеть это на примере, вы можете взять контейнер fnv [6] на crates.io [7] и создать 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
[8] безразличен к конкретному алгоритму хэширования, поэтому никаких изменений в типах, хранимых в HashMap
, не нужно!
Другие заметные улучшения включают:
<[T]>::clone_from_slice()
, эффективный способ копировать данные из одного среза в другой.Ipv4Addr
и Ipv6Addr
для удобства, вроде is_loopback()
, который возвращает true
или false
в зависимости от того, является ли адрес петлевым (loopback address), как описано в RFC 6890.CString
, используемом в FFI.Подробнее смотрите замечания к выпуску [2].
Сделано несколько небольших изменений в Cargo:
cargo rustc
][modification to the cargo rustc
subcommand] позволяет указать профиль, согласно которому должны браться зависимости времени разработки (dev-dependencies) во время тестирования и т.д.144 человека участвовало в разработке 1.7. Большое спасибо!
Автор: mkpankov
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/anons/114195
Ссылки в тексте:
[1] установить Rust 1.7: https://www.rust-lang.org/install.html
[2] подробный список изменений для версии 1.7: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-170-2016-03-03
[3] SipHash: https://en.wikipedia.org/wiki/SipHash
[4] не очень быстр: http://cglab.ca/~abeinges/blah/hash-rs/
[5] Алгоритм FNV: https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
[6] контейнер fnv: https://crates.io/crates/fnv
[7] crates.io: https://crates.io
[8] Hash
: http://doc.rust-lang.org/std/hash/trait.Hash.html
[9] Источник: https://habrahabr.ru/post/278649/
Нажмите здесь для печати.