- PVSM.RU - https://www.pvsm.ru -
Команда Rust рада сообщить о новой версии языка — 1.62.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.62.0 вам достаточно выполнить команду:
rustup update stable
Если у вас ещё нет rustup
, то можете установить его со страницы [1] на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.62.0 [2] на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta
) или nightly (rustup default nightly
) канал. Пожалуйста, сообщайте [3] обо всех встреченных вами ошибках.
cargo add
Теперь вы можете добавить новые зависимости напрямую из командной строки с помощью cargo add
. Эта команда поддерживает специфические особенности и версии. Также она может использоваться для изменения существующих зависимостей.
Например:
cargo add log
cargo add serde --features derive
cargo add nom@5
Чтобы узнать больше, смотрите документацию cargo [4].
#[default]
варианты перечисленияТеперь вы можете использовать #[derive(Default)]
для перечислений, если укажете вариант по умолчанию. Например, до сих пор вам приходилось вручную писать реализацию Default
для подобного перечисления:
#[derive(Default)]
enum Maybe<T> {
#[default]
Nothing,
Something(T),
}
На данный момент только "единичные" варианты (варианты без полей) могут быть помечены #[default]
. Дополнительные сведения об этой функциональности доступны в соответствующем RFC [5].
Раньше Mutex
, Condvar
и RwLock
поддерживались библиотекой pthreads
на Linux. Блокировки pthreads
поддерживают больше функций, чем сами API-интерфейсы Rust, включая настройку времени выполнения, и предназначены для использования в языках с меньшим количеством статических гарантий, чем предоставляет Rust.
Реализация мьютекса, например, имеет размер 40 байт и не может быть перемещена. Это заставило стандартную библиотеку выделять Box
за кулисами для каждого нового мьютекса на тех платформах, на которых используется pthreads
.
Стандартная библиотека Rust теперь поставляется с необработанной реализацией этих блокировок на основе фьютексов на Linux, которая очень легковесна и не требует дополнительного выделения памяти. В версии 1.62.0 Mutex
требуется всего 5 байтов для внутреннего состояния на Linux, хотя это может измениться в будущих версиях.
Это часть долгой работы по повышению эффективности типов блокировки Rust, которая включает в себя предыдущие улучшения на Windows, такие как распаковка примитивов. Вы можете прочитать больше о наших усилиях в обсуждении этого вопроса [6].
x86_64
цель без ОСТеперь стало проще создавать бинарные файлы без ОС для x86_64
, например при написании ядра. Цель x86_64-unknown-none
[7] была доставлена до Уровня 2 [8] и может быть установлена с помощью rustup
.
rustup target add x86_64-unknown-none
rustc --target x86_64-unknown-none my_no_std_program.rs
Подробнее о разработке с использованием no_std
можно прочитать в книге Embedded Rust [9].
Стабилизированы следующие методы и реализации типажей:
bool::then_some
[10]f32::total_cmp
[11]f64::total_cmp
[12]Stdin::lines
[13]windows::CommandExt::raw_arg
[14]impl<T: Default> Default for AssertUnwindSafe<T>
[15]From<Rc<str>> для Rc<[u8]>
[16]From<Arc<str>> для Arc<[u8]>
[17]FusedIterator для EncodeWide
[18]В выпуске Rust 1.62.0 есть и другие изменения: узнайте, что изменилось в Rust [20], Cargo [21] и Clippy [22].
Многие люди собрались вместе, чтобы создать Rust 1.62.0. Без вас мы бы не справились. Спасибо! [23]
С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате [24] или же в аналогичном чате для новичковых вопросов [25]. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков [26].
Данную статью совместными усилиями перевели @maksugr [27], andreevlex [28], TelegaOvoshey [29] и funkill [30].
Автор:
RustLangRu
Источник [31]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/376567
Ссылки в тексте:
[1] страницы: https://www.rust-lang.org/install.html
[2] подробным описанием выпуска 1.62.0: https://github.com/rust-lang/rust/blob/master/RELEASES.md#version-1620-2022-06-30
[3] сообщайте: https://github.com/rust-lang/rust/issues/new/choose
[4] документацию cargo: https://doc.rust-lang.org/nightly/cargo/commands/cargo-add.html
[5] RFC: https://rust-lang.github.io/rfcs/3107-derive-default-enum.html
[6] обсуждении этого вопроса: https://github.com/rust-lang/rust/issues/93740
[7] x86_64-unknown-none
: https://doc.rust-lang.org/beta/rustc/platform-support/x86_64-unknown-none.html
[8] Уровня 2: https://doc.rust-lang.org/rustc/platform-support.html#tier-2
[9] книге Embedded Rust: https://docs.rust-embedded.org/book/intro/no-std.html
[10] bool::then_some
: https://doc.rust-lang.org/stable/std/primitive.bool.html#method.then_some
[11] f32::total_cmp
: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.total_cmp
[12] f64::total_cmp
: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.total_cmp
[13] Stdin::lines
: https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#method.lines
[14] windows::CommandExt::raw_arg
: https://doc.rust-lang.org/stable/std/os/windows/process/trait.CommandExt.html#tymethod.raw_arg
[15] impl<T: Default> Default for AssertUnwindSafe<T>
: https://doc.rust-lang.org/stable/std/panic/struct.AssertUnwindSafe.html#impl-Default
[16] From<Rc<str>> для Rc<[u8]>
: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#impl-From%3CRc%3Cstr%3E%3E
[17] From<Arc<str>> для Arc<[u8]>
: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#impl-From%3CArc%3Cstr%3E%3E
[18] FusedIterator для EncodeWide
: https://doc.rust-lang.org/stable/std/os/windows/ffi/struct.EncodeWide.html#impl-FusedIterator
[19] RDM intrinsics для aarch64: https://github.com/rust-lang/stdarch/pull/1285
[20] Rust: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-1620-2022-06-30
[21] Cargo: https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-162-2022-06-30
[22] Clippy: https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-162
[23] Спасибо!: https://thanks.rust-lang.org/rust/1.62.0/
[24] русскоязычном Телеграм-чате: https://t.me/rustlang_ru
[25] чате для новичковых вопросов: https://t.me/rust_beginners_ru
[26] чат переводчиков: https://t.me/rustlang_ru_translations
[27] @maksugr: https://github.com/maksugr
[28] andreevlex: https://habr.com/ru/users/andreevlex/
[29] TelegaOvoshey: https://habr.com/ru/users/telegaovoshey/
[30] funkill: https://habr.com/ru/users/funkill/
[31] Источник: https://habr.com/ru/post/674614/?utm_source=habrahabr&utm_medium=rss&utm_campaign=674614
Нажмите здесь для печати.