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


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


  • bool::then_some
  • f32::total_cmp
  • f64::total_cmp
  • Stdin::lines
  • windows::CommandExt::raw_arg
  • impl<T: Default> Default for AssertUnwindSafe<T>
  • From<Rc<str>> для Rc<[u8]>
  • From<Arc<str>> для Arc<[u8]>
  • FusedIterator для EncodeWide
  • RDM intrinsics для aarch64

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


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


Участники 1.62.0


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


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


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


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

Источник: https://habr.com/ru/post/674614/


Интересные статьи

Интересные статьи

Да, настал уже 2022 год, причем праздники еще продолжаются, но многие из нас строят разного рода планы. Они могут касаться как масштабных и очень значительных целей, вроде смены работы или старта со...
Поддержка многопоточности стала одним из важнейших апгрейдов производительности в WebAssembly. Она позволяет выполнять либо части кода на разных ядрах параллельно, либо один код для независимых эл...
Архиватор 7-Zip отлично справляется со своей задачей — эффективно сжимать данные. Его можно назвать «швейцарским ножом» в мире архиваторов. Он поддерживает разные алгоритмы сжатия и бол...
Прошло всего два месяца со времени выхода релиза ядра Linux 5.8, которое назвали «величайшим»", а Торвальдс уже опубликовал новый релиз, на этот раз версии 5.9. По данным ...
Перевод статьи подготовлен специально для студентов курса «Администратор Linux». Здесь вы получите ответы на важные вопросы о жизни, вселенной и всем таком в Linux с улучшенной безопасностью. ...