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

в 13:41, , рубрики: Без рубрики

Команда Rust рада сообщить о новой версии языка — 1.62.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.62.0 вам достаточно выполнить команду:

rustup update stable

Если у вас ещё нет rustup, то можете установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.62.0 на GitHub.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

cargo add

Теперь вы можете добавить новые зависимости напрямую из командной строки с помощью cargo add. Эта команда поддерживает специфические особенности и версии. Также она может использоваться для изменения существующих зависимостей.

Например:

cargo add log
cargo add serde --features derive
cargo add nom@5

Чтобы узнать больше, смотрите документацию cargo.

#[default] варианты перечисления

Теперь вы можете использовать #[derive(Default)] для перечислений, если укажете вариант по умолчанию. Например, до сих пор вам приходилось вручную писать реализацию Default для подобного перечисления:

#[derive(Default)]
enum Maybe<T> {
    #[default]
    Nothing,

    Something(T),
}

На данный момент только "единичные" варианты (варианты без полей) могут быть помечены #[default]. Дополнительные сведения об этой функциональности доступны в соответствующем RFC.

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

Раньше Mutex, Condvar и RwLock поддерживались библиотекой pthreads на Linux. Блокировки pthreads поддерживают больше функций, чем сами API-интерфейсы Rust, включая настройку времени выполнения, и предназначены для использования в языках с меньшим количеством статических гарантий, чем предоставляет Rust.

Реализация мьютекса, например, имеет размер 40 байт и не может быть перемещена. Это заставило стандартную библиотеку выделять Box за кулисами для каждого нового мьютекса на тех платформах, на которых используется pthreads.

Стандартная библиотека Rust теперь поставляется с необработанной реализацией этих блокировок на основе фьютексов на Linux, которая очень легковесна и не требует дополнительного выделения памяти. В версии 1.62.0 Mutex требуется всего 5 байтов для внутреннего состояния на Linux, хотя это может измениться в будущих версиях.

Это часть долгой работы по повышению эффективности типов блокировки Rust, которая включает в себя предыдущие улучшения на Windows, такие как распаковка примитивов. Вы можете прочитать больше о наших усилиях в обсуждении этого вопроса.

x86_64 цель без ОС

Теперь стало проще создавать бинарные файлы без ОС для x86_64, например при написании ядра. Цель x86_64-unknown-none была доставлена до Уровня 2 и может быть установлена с помощью rustup.

rustup target add x86_64-unknown-none
rustc --target x86_64-unknown-none my_no_std_program.rs

Подробнее о разработке с использованием no_std можно прочитать в книге Embedded Rust.

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

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

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

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

Участники 1.62.0

Многие люди собрались вместе, чтобы создать Rust 1.62.0. Без вас мы бы не справились. Спасибо!

От переводчиков

С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.

Данную статью совместными усилиями перевели @maksugr, andreevlex, TelegaOvoshey и funkill.

Автор:
RustLangRu

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js