
Size: a a a
write_u32
и write_i8
, однако в текущем виде эти методы используют реализацию по умолчанию. Реализация этих методов напрямую может ускорить хэширование — и это изменение предлагалось, но, к сожалению, его пришлось отбросить, поскольку оно негативно сказывалось на времени компиляции некоторых бенчмарков :(min_const_generics
, то есть версия с серьёзными ограничениями, о которых можно подробнее почитать отдельно. Одни из них вполне понятны — это ограничения на использование выражений с использованием таких параметров — что вполне логично, поскольку в общем случае их унификация является достаточно сложной задачей, а вот ограничения на типы самих константых обобщённых параметров куда более обидны: использовать пока что можно лишь примитивные числовые типы, char
и bool
. С другой стороны, одной из главных причин стабилизации const generics была необходимость в возможности писать код, полиморфный по массивам произвольной размерности (что ранее решалось лишь частично при помощи копипаста, разбавленного макросами), и эту задачу нынешний вариант const generics решает..into_iter()
на векторе (и делать аллокацию там, где она не нужна), вызывать .iter().cloned()
/.iter().copied()
на литерале массива (что делает лишнее копирование, которое в некоторых случаях невозможно вовсе) или же .chain(...)-ить once-ы (что выглядит громоздко и, более того, достаточно медленно работает). Теперь же есть нормальные рабочий вариант. Почему же не добавили impl Intoiterator for [T; N]
, спросите вы? К сожалению, есть странные люди, которые вызывают .into_iter()
на литералах массива, который ввиду авто-борровинга вызывает <&[T]>::into_iter
, что, в принципе, аналогично вызову .iter()
. Добавление реализации IntoIterator
для массивов технически сломало бы этот код. Не исключено, что в будущем на этот шаг всё-таки пойдут, и array::IntoIter::new
останется на свалке истории.cargo doc
добавляет в документацию методы, полученные при помощи deref coercion произвольной глубины применения. До этого изменения, если у нас были типы A
, B
и C
с реализациями impl Deref<Target = B> for A
и impl Deref<Target = C> for B
, то документация к A
показывала методы A
и B
, но не C
. Теперь же будут видны и методы C
.cargo test -- --include-ignored
. До этого можно было запустить либо основные тесты, либо игнорируемые, но не оба набора сразу.std::iter::Peekable::
{next_if, next_if_eq}, которые возвращают следующий элемент только в том случае, если он удовлетворяет предикату/равен переданному значению. Невероятно полезная вещь при написании парсеров.str::
split_inclusive, который разбивает строку на подстроки по разделителю, включая сам разделитель в подстроки (возрадуйся, @rustamann!). Аналогичные методы добавлены для слайсов (split_inclusive/split_inclusive_mut)