Русский
Русский
English
Статистика
Реклама

Перевод Rust 1.46.0 track_caller и улучшения const fn

Команда 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.

Источник: habr.com
К списку статей
Опубликовано: 28.08.2020 22:20:21
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Open source

Программирование

Системное программирование

Компиляторы

Rust

Clippy

Cargo

Rustc

Rustdoc

Rustfmt

Rustfix

Release

Stable

Языки программирования

Стабильная версия

Выпуск версий

Новости технологий

Перевод

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru