Команда Rust рада объявить о новой версии Rust 1.46.0. Rust это язык программирования, который позволяет каждому создавать надёжное и эффективное программное обеспечение.
Если у вас установлена предыдущая версия Rust через rustup, получить Rust 1.46.0 так же просто, как:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете
установить его с соответствующей страницы нашего
веб-сайта и ознакомиться с подробными примечаниями к выпуску 1.46.0 на
GitHub.
Что вошло в стабильную версию 1.46.0
Этот выпуск достаточно небольшой, с улучшениями в const
fn
, стабилизацией двух новых API в стандартной библиотеке и
одной опции, удобной для авторов библиотек. Смотрите подробные примечания к выпуску чтобы узнать о
других изменениях, не представленных в данном анонсе.
#[track_caller]
Вернёмся в март, когда был выпущен Rust 1.42, в котором улучшились сообщения об ошибках, когда
unwrap
и подобные функции приводили к панике. Тогда мы
упоминали, что реализация ещё не стабильна. В Rust 1.46 мы её
стабилизировали.
Этот атрибут зовётся #[track_caller]
и был предложен в
RFC 2091 аж в июле 2017! Если вы пишете функцию,
подобную unwrap
, которая может приводить к панике, вы
можете добавить эту аннотацию к вашей функции, и модуль
форматирования паники по умолчанию будет использовать её для
отображения сообщения об ошибке. Например, unwrap
:
pub fn unwrap(self) -> T { match self { Some(val) => val, None => panic!("вызван `Option::unwrap()` на значении `None`"), }}
Теперь будет выглядеть так:
#[track_caller]pub fn unwrap(self) -> T { match self { Some(val) => val, None => panic!("вызван `Option::unwrap()` на значении `None`"), }}
Вот и всё!
Если вы сами реализуете ловушку паники, вы можете использовать
метод вызывающей стороны в
std::panic::Location
, чтобы получить доступ к этой
информации.
Улучшения const fn
Теперь вы также можете использовать в const fn
некоторые базовые языковые вещи, такие как:
-
if
,if let
иmatch
-
while
,while let
иloop
- операторы
&&
и||
А также преобразование в срез:
const fn foo() { let x = [1, 2, 3, 4, 5]; // преобразовываем массив в срез let y: &[_] = &x;}
Хотя эти функции могут не казаться вам новыми,
учитывая, что вы можете использовать их все помимо const
fn
, они добавляют много вычислительной мощности во время
компиляции! Как
например, библиотека const-sha1
может позволить вам
вычислить хэши SHA1 во время компиляции. Это привело к 40-кратному повышению производительности в
Microsoft WinRT для Rust.
Изменения в библиотеке
На волне улучшений в const fn
, std::mem::forget
теперь тоже
const fn
. Дополнительно в этом выпуске были
стабилизированы два новых API:
Для получения более детальной информации, смотрите подробные примечания к выпуску.
Другие изменения
Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.
Участники 1.46.0
Множество людей собрались вместе, чтобы создать Rust 1.46.0. Мы не смогли бы сделать это без всех вас. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном
чате для новичковых вопросов. Если у вас есть
вопросы по переводам или хотите помогать с ними, то обращайтесь в
чат переводчиков.
Так же можете поддержать нас на opencollective: https://opencollective.com/rust-lang-ru.
Данную статью совместными усилиями перевели funkill, Hirrolot и andreevlex.