Вышел Rust 1.27
Новости Отредактировано
В новую версию была добавлена поддержка явного использования SIMD, поддержка нового синтаксиса для типов объектов типажей и новые функции.
742 открытий758 показов
Вышла новая версия Rust — современного языка системного программирования, ориентированного на безопасность, скорость и параллелизм. Обновления Rust выпускаются каждые несколько недель, поэтому новые версии приносят относительно немного изменений.
SIMD
В Rust 1.27 была добавлена поддержка явного использования SIMD — набора инструкций процессора, одновременно оперирующих над несколькими наборами данных, что позволяет ускорить работу алгоритмов, занимающихся обработкой данных, в несколько раз. Использование SIMD ортогонально использованию многопоточности; для оптимальной производительности нужно использовать оба подхода одновременно.
Во многих случаях компилятор способен автоматически использовать инструкции SIMD при генерации кода прораммы (автовекторизация); тем не менее, в некоторых случаях программе может быть важно явно управлять использованием SIMD, что и позволяет делать добавленный в Rust 1.27 модуль std::arch
.
Многие из библиотек и инструментов, написанные на Rust, уже были ускорены за счёт использования SIMD. Например, инструмент поиска ripgrep
, замена инструменту grep
, теперь может работать в несколько раз быстрее:
Сами по себе инструкции SIMD являются относительно низкоуровневыми, поэтому в экосистеме Rust уже есть несколько пакетов (crates), предоставляющих высокоуровневый интерфейс к SIMD, такие как пакет с говорящим названием faster. Он позволяет писать код, использующий SIMD, в стиле, максимально похожем на обыкновенное использование итераторов. Так, вместо
для использования SIMD при помощи faster достаточно написать
dyn Trait
В Rust 1.27 появилась поддержка нового синтаксиса для типов объектов типажей, dyn Trait
. Старый синтаксис, при использовании которого тип объектов типажей обозначается так же, как и сам типаж, Trait
, обладает несколькими недостатками, в том числе он не подчёркивает использование виртуального вызова (динамического разрешения метода) и его легко перепутать с использованием обобщений (generics) или impl Trait
.
Начиная с версии 1.27, вместо Trait
в качестве типа объектов типажей поддерживается и рекомендуется использовать dyn Trait
(например, Box<dyn Foo>
вместо Box<Foo>
, &dyn Foo
вместо &Foo
и &mut dyn Foo
вместо &mut Foo
). Старый синтаксис по-прежнему поддерживается для обеспечения совместимости.
Прочее
Кроме того, в Rust 1.27 была добавлена поддержка атрибута #[must_use]
при объявлении функций (ранее этот атрибут мог быть использован только при объявлении типа). В стандартную библиотеку было добавлено несколько функций, в том числе process::id()
и os::unix::process::parent_id()
, позволяющие получить номер текущего и родительского процессов соответственно, Option::filter()
, позволяющая отбрасывать опциональные значения, не подходящие под заданное условие, и небезопасная (отмеченная как unsafe
) функция hint::unreachable_unchecked(), вызывающая неопределённое поведение, что позволяет компилятору дополнительно оптимизировать код без учёта случаев, приводящих к выполнению этой функции.
С подробным списком изменений можно ознакомиться в GitHub-репозитории проекта.
742 открытий758 показов