Данный анонс является компиляцией черновика анонса и подробных примечаний к выпуску. Официальный анонс короче, чем обычно:
This is a shorter blog post than usual: in acknowledgement that taking a stand against the police brutality currently happening in the US and the world at large is more important than sharing tech knowledge, we decided to significantly scale back the amount of promotion we're doing for this release.
The Rust Core Team
Команда Rust выпустила новую версию, 1.44.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если вы установили предыдущую версию Rust средствами rustup
, то для обновления до версии 1.44.0 вам достаточно выполнить следующую команду:
rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Что вошло в стабильную версию 1.44.0
Выпуск Rust 1.44 не содержит значительных изменений: мы полировали существующее и стабилизировали несколько API в стандартной библиотеке.
cargo tree
— очень старое и популярное дополнение для Cargo
, которое выводит в консоль зависимости проекта в виде дерева. Его первый выпуск был в декабре 2015 и к настоящему моменту у него уже около 50000 загрузок; мы решили добавить его в Cargo.
mdbook v0.3.2 (/Users/src/rust/mdbook)
├── ammonia v3.0.0
│ ├── html5ever v0.24.0
│ │ ├── log v0.4.8
│ │ │ └── cfg-if v0.1.9
│ │ ├── mac v0.1.1
│ │ └── markup5ever v0.9.0
│ │ ├── log v0.4.8 (*)
│ │ ├── phf v0.7.24
│ │ │ └── phf_shared v0.7.24
│ │ │ ├── siphasher v0.2.3
│ │ │ └── unicase v1.4.2
│ │ │ [build-dependencies]
│ │ │ └── version_check v0.1.5
...
Из этого примера мы видим, что mdbook
зависит от пакета ammonia
, который в свою очередь зависит от html5ever
, а он уже от log
, mac
, markup5ever
и так далее.
Также вы можете использовать cargo tree -d
(сокращение для cargo tree --duplicates
) для отображения зависимостей разных версий одного и того же пакета. Она отобразит записи для всех версий всех зависимостей и инвертированное дерево зависимостей, показывающее как каждая версия была получена.
Этот выпуск также отмечает расширение возможностей использования async
/await
: теперь их можно использовать в no_std
контексте. До этого реализация временно требовала локальной памяти потока. В этом выпуске данное ограничение было убрано, а значит наличие libstd
больше не обязательно при использовании async
/await
.
Изменения в стандартной библиотеке
vec![]
теперь может быть использован в const
-контексте. Обратите внимание, что так можно создать только пустой вектор: vec![]
скомпилируется, а vec![1, 2, 3]
— нет.
Добавлена поддержка Unicode 13.
Vec<T>
теперь реализует From<[T; N]>
при N
не большем 32.
Дополнительно мы стабилизировали 11 новых API:
PathBuf::with_capacity
PathBuf::capacity
PathBuf::clear
PathBuf::reserve
PathBuf::reserve_exact
PathBuf::shrink_to_fit
f32::to_int_unchecked
f64::to_int_unchecked
Layout::align_to
Layout::pad_to_align
Layout::array
Layout::extend
Другие изменения
rustc
теперь учитывает флаг-C codegen-units
при инкрементальной компиляции. К тому же в режиме инкрементальной компиляцииrustc
по умолчанию выставляетcodegen-units
в 256.catch_unwind
теперь zero-cost, за исключением случаев, если брошенpanic!
и включена раскрутка.rustc
корректно генерирует статические библиотеки на Windows GNU с расширением.a
, а не.lib
, как было до этого.Из rustc
убран флаг-C no_integrated_as
.Свойство file_name
в JSON-выводе ошибки из макроса теперь указывает на действительный исходный файл, а не<NAME macros>
. Обратите внимание, что это не имя файла в пользовательской системе.- Минимальная внешняя версия LLVM теперь 8.
mem::{zeroed, uninitialised}
паникуют, при использовании с типами, не предусматривающими инициализацию нулём, напримерNonZeroU8
. Раньше это было только предупреждением.В 1.45.0 (следующий выпуск) приведение f64
вu32
с использованием оператораas
будет определена как насыщающая операция. Раньше такое приведение было неопределённым поведением и вы можете использовать методы{f64, f32}::to_int_unchecked
чтобы получить текущее поведение, которое может быть желательным в редких чувствительных к производительности ситуациях.
Синтаксис, пакетный менеджер Cargo и анализатор Clippy также претерпели некоторые изменения.
Участники 1.44.0
Множество людей собрались вместе, чтобы создать Rust 1.44.0. Мы не смогли бы сделать это без всех вас, спасибо!
От переводчиков
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.