Скажи привет ржавчине 1.84.0

Скажи привет ржавчине 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. Мы не могли бы сделать это без всех вас.Спасибо!


Команда релиза ржавчины

Также опубликованоздесь

ФотоПабло джентиленаНеспособный


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE