Команда 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.
vtvz_ru
Не так давно слушал подкаст с участием создателя cargo-edit. Он рассказывал, что команда разработки этой тулзы хотят затянуть ее функциональность в cargo, и, видимо, у них это получается. Судя по комментариям на реддите, сообщество ликует)
Мне тоже кажется, что возможность редактировать зависимости через официальный cli -- это то, что должно быть в любой современной экосистеме достаточно свежего ЯП. Когда только познакомился с Rust, я был крайне удивлен, что этого не было сделано изначально, и надо править toml файл ручками.
DarkEld3r
Справедливости ради, ИДЕ тоже решают эту задачу: IntelliJ Rust и последнюю версию показывает и автодополняет по названию. Правда не проверял умеет ли так rust-analyzer.