Команда Rust рада сообщить о выпуске новой версии — 1.57.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если вы установили предыдущую версию Rust средствами rustup
, то для обновления до версии 1.57.0 вам достаточно выполнить следующую команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Что стабилизировано в 1.57.0
Rust 1.57 привносит panic!
в константные контексты, добавляет поддержку настраиваемых профилей в Cargo и стабилизирует ошибочные API резервирования.
panic!
в константных контекстах
С предыдущими версиями Rust макрос panic!
не использовался в const fn
и других контекстах времени компиляции. Теперь это стабилизировано. Вместе со стабилизацией panic!
в const теперь можно использовать несколько других стандартных библиотечных API, например assert!
.
Эта стабилизация ещё не включает в себя полную инфраструктуру форматирования, так что макрос panic!
должен вызываться либо со статической строкой ( panic!("...")
), либо с одним интерполированным значением &str
(panic!("{}", a)
), которое должно использоваться с {}
(без формата спецификаторов или других типажей).
Ожидается, что в будущем эта поддержка будет расширяться, но такая минимальная стабилизация уже позволяет проверять простые утверждения во время компиляции, например проверки размера типа:
const _: () = assert!(std::mem::size_of::<u64>() == 8);
const _: () = assert!(std::mem::size_of::<u8>() == 1);
Поддержка пользовательских профилей в Cargo
Cargo уже давно поддерживает четыре профиля: dev
, release
, test
и bench
. В Rust 1.57 добавлена поддержка профилей с произвольными именами.
Например, если вы хотите включить оптимизацию времени компоновки (LTO) только при создании окончательной производственной сборки, добавление следующего фрагмента в Cargo.toml включает lto
, когда этот профиль выбран, но избегает включения его для сборок с профилем release.
[profile.production]
inherits = "release"
lto = true
Обратите внимание, что пользовательские профили должны указывать профиль, от которого они наследуют настройки по умолчанию. После того, как профиль определён, у команд Cargo, которые строят код, можно попросить использовать его с --profile production
. В настоящее время артефакты будут собираться в отдельном каталоге (target/production
). Это означает, что артефакты не используются совместно между каталогами.
Обработка ошибок при выделении памяти
Rust 1.57 стабилизирует try_reserve
для Vec
, String
, HashMap
, HashSet
и VecDeque
. Этот API позволяет вызывающему коду обрабатывать ошибку выделения памяти для этих типов.
Rust обычно прерывает процесс, если глобальный распределитель памяти даёт сбой, что не всегда желательно. Этот API предоставляет метод, позволяющий избежать такого прерывания при работе с коллекциями из стандартной библиотеки. Однако Rust не гарантирует, что возвращаемая память фактически выделена ядром: например, если в Linux включён overcommit, память может быть недоступна при попытке её использования.
Стабилизированные API
Стабилизированы следующие методы и реализации типажей.
collections::TryReserveError
HashMap::try_reserve
HashSet::try_reserve
String::try_reserve
String::try_reserve_exact
Vec::try_reserve
Vec::try_reserve_exact
VecDeque::try_reserve
VecDeque::try_reserve_exact
Iterator::map_while
iter::MapWhile
proc_macro::is_available
Command::get_program
Command::get_args
Command::get_envs
Command::get_current_dir
CommandArgs
CommandEnvs
Следующие ранее стабилизированные API стали const
:
Прочие изменения
Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.
Участники 1.57.0
Множество людей собрались вместе, чтобы создать Rust 1.57.0. Мы не смогли бы сделать это без всех вас. Спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков. Также можете поддержать нас на OpenCollective.
Данную статью совместными усилиями перевели belanchuk, andreevlex, MaybeWaffle, TelegaOvoshey и funkill.
Автор:
RustLangRu