
Скажи привет ржавчине 1.84.0
8 июня 2025 г.Команда Rust с радостью объявила о новой версии Rust, 1.84.0. Rust - это язык программирования, позволяющий всем создавать надежное и эффективное программное обеспечение.
Если у вас предыдущая версия Rust, установленная черезrustup
, вы можете получить 1.84.0 с:
$ rustup update stable
Если у вас его еще нет, вы можетеполучатьrustup
На соответствующей странице на нашем веб -сайте и проверьтеПодробные заметки о выпуске для 1.84.0Полем
Если вы хотите помочь нам, тестируя будущие релизы, вы можете рассмотреть возможность обновления локально для использования бета -канала (rustup default beta
) или ночной канал (rustup default nightly
) ПожалуйстаотчетЛюбые ошибки, с которыми вы можете встретить!
Что в стабильном 1,84,0
Груз рассматривает версии ржавчины для выбора версий зависимости
1.84.0 стабилизирует резолвер с минимальной поддержкой Rust Version (MSRV), который предпочитает версии зависимости, совместимые с объявленным проектомMSRVПолем Благодаря выбору версий MSRV, труд уменьшается для сопровождающих для поддержки более старых инструментов, не нуждаясь в вручную выбирать более старые версии для каждой зависимости.
Вы можете зарегистрироваться.cargo/config.toml
:
[resolver]
incompatible-rust-versions = "fallback"
Затем при добавлении зависимости:
$ cargo add clap
Updating crates.io index
warning: ignoring clap@4.5.23 (which requires rustc 1.74) to maintain demo's rust-version of 1.60
Adding clap v4.0.32 to dependencies
Updating crates.io index
Locking 33 packages to latest Rust 1.60 compatible versions
Adding clap v4.0.32 (available: v4.5.23, requires Rust 1.74)
КогдаПроверка новейших зависимостей в CI, вы можете переопределить это:
$ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=allow cargo update
Updating crates.io index
Locking 12 packages to latest compatible versions
Updating clap v4.0.32 -> v4.5.23
Вы также можете зарегистрироваться, настроивpackage.resolver = "3"
В файле MANIFEST CARGO.TOML, хотя это потребует повышения вашего MSRV до 1,84. Новый Resolver будет включен по умолчанию для проектов с использованием издания 2024 года (который будет стабилизироваться в 1,85).
Это дает авторам библиотеки большую гибкость при принятии решения о их политике по принятию новых функций инструментального оборудования Rust. Ранее библиотека, внедряющая функции из нового инструментального оборудования Rust, заставила бы пользователей вниз по течению той библиотеки, у которой старая версия Rust для обновления их инструментов или вручную выбирать старую версию библиотеки, совместимую с их инструментами (и избегайте запускаcargo update
) Теперь эти пользователи смогут автоматически использовать более старые библиотечные версии, совместимые со своим старым инструментами.
УвидетьдокументацияДля получения дополнительной информации при принятии решения о политике MSRV.
Начнется миграция на новый решатель признаков
Компилятор ржавчины находится в процессе перехода на новую реализацию для решателя признаков. Решатель черт следующего поколения является резумцией основной компонента системы типа Rust. Это не только ответственность за проверку того, есть ли связаны с чертами - например,Vec<T>: Clone
- удерживаться, но также используется многими другими частями типовой системы, такими как нормализация - выяснение основного типа<Vec<T> as IntoIterator>::Item
- и приравнивая типы (проверяя,T
иU
такие же).
В 1.84 новый решатель используется для проверки когерентности признаков. На высоком уровне когерентность несет ответственность за обеспечение того, чтобы в большинстве случаев была внедрена качества для данного типа, рассматривая еще не написанный или видимый код из других ящиков.
Эта стабилизация исправляет несколько в основном теоретических вопросов правильности старой реализации, что приводит к потенциальным «противоречивым реализациям признаков ...» ошибки, о которых ранее не сообщалось. Мы ожидаем, что затронутые закономерности будут очень редкими на основе оценки доступного кода черезКратерПолем Стабилизация также улучшает нашу способность доказать, что имплс делаетнетперекрытие, позволяя записано больше кода в некоторых случаях.
Для получения более подробной информации см.Предыдущий пост в блогеиОтчет о стабилизацииПолем
Строгие провенансные API
В ржавчине,указатели - это не просто «целое число» или «адрес»Полем Например, «использование после свободного» - это неопределенное поведение, даже если вам «повезет», а освобожденная память перераспределяется до вашего чтения/записи. В качестве другого примера, написание через указатель, полученный из&i32
Ссылка является неопределенным поведением, даже если запись по одному и тому же адресу с помощью другого указателя является законным. Основная схема здесь в том, чтоспособ вычисленного указателя, не только адрес, который вытекает из этого вычисления. По этой причине мы говорим, что указателипроисхождение: Чтобы полностью охарактеризовать неопределенное поведение, связанное с указателем в ржавчине, мы должны знать не только адрес, на который указывает указатель, но и отслеживать, какой другой указатель (ы) он «получен».
В большинстве случаев программистам не нужно много беспокоиться о происхождении, и совершенно ясно, как пошел указатель. Однако при приостановке указателей на целые числа и обратно, происхождение полученного указателя недостаточно. С помощью этого выпуска Rust добавляет набор API, которые во многих случаях могут заменить использование целочисленных точек и, следовательно, избежать неоднозначности, присущих таким слепкам.
В частности, модель использования самых низких кусочков выровненного указателя для хранения дополнительной информации теперь может быть реализована без указания указателя на целое число или обратно. Это облегчает рассуждение кода, проще анализировать для компилятора, а также преимущества, такие как инструментыМирии архитектуры, какЧериЭта цель - обнаружить и диагностировать неправильное использование указателя.
Для получения более подробной информации см. Стандартную библиотекуДокументация по происхождениюПолем
Стабилизированные API
Ipv6Addr::is_unique_local
Ipv6Addr::is_unicast_link_local
core::ptr::with_exposed_provenance
core::ptr::with_exposed_provenance_mut
<ptr>::addr
<ptr>::expose_provenance
<ptr>::with_addr
<ptr>::map_addr
<int>::isqrt
<int>::checked_isqrt
<uint>::isqrt
NonZero::isqrt
core::ptr::without_provenance
core::ptr::without_provenance_mut
core::ptr::dangling
core::ptr::dangling_mut
Pin::as_deref_mut
Эти API теперь стабильны в контексте контекста
AtomicBool::from_ptr
AtomicPtr::from_ptr
AtomicU8::from_ptr
AtomicU16::from_ptr
AtomicU32::from_ptr
AtomicU64::from_ptr
AtomicUsize::from_ptr
AtomicI8::from_ptr
AtomicI16::from_ptr
AtomicI32::from_ptr
AtomicI64::from_ptr
AtomicIsize::from_ptr
<ptr>::is_null
<ptr>::as_ref
<ptr>::as_mut
Pin::new
Pin::new_unchecked
Pin::get_ref
Pin::into_ref
Pin::get_mut
Pin::get_unchecked_mut
Pin::static_ref
Pin::static_mut
Другие изменения
Проверьте все, что изменилось вРжавчинаВГруз, иКлиппиПолем
Авторы 1,84,0
Многие люди собрались вместе, чтобы создать ржавчину 1.84.0. Мы не могли бы сделать это без всех вас.Спасибо!
Команда релиза ржавчины
Также опубликованоздесь
ФотоПабло джентиленаНеспособный
Оригинал