- PVSM.RU - https://www.pvsm.ru -

Rust 1.62.0: cargo add, #[default] для перечислений, быстрые мьютексы на Linux и поддержка baremetal x86_64 платформ

Команда 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] обо всех встреченных вами ошибках.

Что стабилизировано в 1.62.0

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].

Более легковесные и быстрые мьютексы на Linux

Раньше 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].

Стабилизированные API

Стабилизированы следующие методы и реализации типажей:

Прочие изменения

В выпуске Rust 1.62.0 есть и другие изменения: узнайте, что изменилось в Rust [20], Cargo [21] и Clippy [22].

Участники 1.62.0

Многие люди собрались вместе, чтобы создать 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