[Open source, Программирование, Системное программирование, Компиляторы, Rust] Rust 1.46.0: track_caller и улучшения const fn (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Команда 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
===========
===========
Автор оригинала: The Rust Core Team
===========Похожие новости:
- [JavaScript, Node.JS, Open source, Разработка веб-сайтов] Сладкая жизнь, или Создание веб-приложения без написания кода
- [Тестирование IT-систем, Программирование, Тестирование веб-сервисов, Управление разработкой] Зачем нам вулканец на борту: обзор Spock Framework
- [Python, Программирование] Как вернуть сразу несколько значений из функции в Python 3 (перевод)
- [Программирование, Управление разработкой, Карьера в IT-индустрии] Больше не тимлид: как не потерять себя и найти снова
- [Программирование, Анализ и проектирование систем, Облачные сервисы, Kubernetes] О растущей популярности Kubernetes (перевод)
- Выпуск языка программирования Rust 1.46
- [Open source, Системное администрирование, IT-инфраструктура, Визуализация данных] Grafana+Zabbix: Визуализация работы производственной линии
- [Разработка веб-сайтов, JavaScript, Клиентская оптимизация, Angular, Разработка под e-commerce] Дружим Angular с Google
- [Программирование] Зачем нужен CI/CD и как научиться его настраивать?
- [Open source, Разработка под Linux, Учебный процесс в IT, Облачные сервисы] Red Hat Flatpak, DevNation Day, шпаргалка по программированию на Cи и пять вебинаров на русском
Теги для поиска: #_open_source, #_programmirovanie (Программирование), #_sistemnoe_programmirovanie (Системное программирование), #_kompiljatory (Компиляторы), #_rust, #_clippy, #_cargo, #_rustc, #_rustdoc, #_rustfmt, #_rustfix, #_release, #_stable, #_jazyki_programmirovanija (языки программирования), #_stabilnaja_versija (стабильная версия), #_vypusk_versij (выпуск версий), #_sistemnoe_programmirovanie (системное программирование), #_novosti_tehnologij (новости технологий), #_perevod (перевод), #_open_source, #_programmirovanie (
Программирование
), #_sistemnoe_programmirovanie (
Системное программирование
), #_kompiljatory (
Компиляторы
), #_rust
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:35
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Команда 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 некоторые базовые языковые вещи, такие как:
А также преобразование в срез: 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 =========== =========== Автор оригинала: The Rust Core Team ===========Похожие новости:
Программирование ), #_sistemnoe_programmirovanie ( Системное программирование ), #_kompiljatory ( Компиляторы ), #_rust |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:35
Часовой пояс: UTC + 5