Рѓа 1.96.0

Соопштението е објавено Рѓа 1.96.0 — најновата стабилна верзија на програмскиот јазик Rust. Ажурирањето е објавено. 28 мај 2026 година; може да се инсталира со користење на стандардната команда rustup update stable. Главните промени вклучуваат нови типови на опсег во core::range, стабилизација на макроа за совпаѓање на шаблони, заострување на однесувањето на градењето на WebAssembly и поправки на две ранливости во Cargo.

Големи промени

  • Нови типови на опсези core::range::Range*.
    Нови типови на опсези се стабилизирани во стандардната библиотека: core::range::Range, RangeFrom, RangeInclusive и нивните поврзани итератори. За разлика од старите типови од core::ops, новите опсези не го имплементираат директно Итераторот, туку се конвертираат во итератор преку IntoIterator. Ова им овозможува на овие опсези да бидат копирани, што е погодно, на пример, при складирање на опсег како структурно поле. Синтакса како 0..1 моментално ги создава старите типови на опсези, но се планира да се мигрира на новите типови во идна верзија на јазикот.

  • Додадени се assert_matches! и debug_assert_matches!.
    Новите макроа ви овозможуваат да проверите дали вредноста се совпаѓа со даден шаблон. Ова е слично по концепт со assert!(matches!(…)), но во случај на грешка, се печати репрезентација за дебагирање на вредноста, што ја поедноставува дијагностиката. Овие макроа не беа додадени во Prelude за да се избегнат конфликти со популарните сандаци од трети страни, па затоа мора експлицитно да се импортираат од јадрото или std.

  • Променето е однесувањето на целите на WebAssembly.
    Rust повеќе не го пренесува --allow-undefined до линкерот за градби на WebAssembly. Недефинираните симболи сега се третираат како грешки за време на поврзувањето, наместо автоматски да се конвертираат во импорти од модулот „env“. Ова треба порано да ги фати грешките во градењето и невалидните имиња на симболи. Старото однесување може да се врати, доколку е потребно, користејќи RUSTFLAGS=-Clink-arg=--allow-undefined или со експлицитно наведување на импортираниот wasm модул користејќи #[link(wasm_import_module = "env")].

  • Товарот доби безбедносни поправки.
    Rust 1.96.0 поправа две ранливости што влијаат на корисниците на регистри од трети страни. CVE-2026-5223 Поврзано со ракувањето со симболични врски во рамките на tarball-овите на crate: злонамерен пакет од регистар на трета страна може да го пребрише кешот на друг пакет од истиот регистар. Почнувајќи од Rust 1.96.0, Cargo ги отфрла архивите на crate што содржат симболични врски. CVE-2026-5222 Овој проблем се однесува на нормализацијата на URL-адресите во реткиот регистар и, под ретки околности, може да резултира со испраќање на Cargo токен до злонамерен регистар. Според тимот на Rust, корисниците на crates.io не се засегнати од овие проблеми.

  • Промени во јазикот.
    Објавувањето вклучува: Неколку помали поправки и подобрувања: Дозволено е пренесување на метапроменливи на expr од макроа во cfg, корегирано е претворањето на типот никогаш во изрази за торки, поправени се ретки случаи на неточни навестувања за тип за аргументи на функции, додадена е поддршка за векторски регистри s390x во инлајн склопувањето и повторно се дозволени константи ManuallyDrop како шаблони - ова ја поправа регресијата воведена во Rust 1.94.0.

  • Промени во компајлерот и платформите.
    За LinuxОвозможена е поддршка за релаксација на врски за целите на LoongArch - оптимизација на врски што поедноставува некои транзиции и повици по распоредувањето на кодот. За riscv64gc-unknown-fuchsia, основната конфигурација е ажурирана на профилот RVA22 со поддршка за векторски екстензии.

  • Стандардни ажурирања на библиотеката.
    Додадена е поддршка за итерирање преку опсези на цели броеви кои не се нула. Исто така, поправено е мрзеливото ракување со адресите на домаќините во SGX преку ToSocketAddr, а дефиницијата за „читлива/запишувачка“ меморија е разјаснета во документацијата и интерните договори: null покажувачот е отстранет од општата дефиниција, а исклучоците сега се наведени одделно за специфични методи.

  • Стабилизирани API-ја.
    Меѓу стабилизираните интерфејси се assert_matches!, debug_assert_matches!, имплементации на From за AssertUnwindSafe , Мрзелив Сел и ЛејзиЛок , како и нови типови на опсези и итератори од core::range, вклучувајќи Range, RangeFrom, RangeToInclusive и нивните итератори.

  • Товар: Промени во зависностите и документацијата.
    Зависноста сега може да специфицира и Git репозиториум и алтернативен регистар: верзијата на Git ќе се користи локално, а верзијата на регистарот ќе се користи за време на објавувањето, слично на однесувањето со crates.io. Додадена е и поддршка за target.'cfg(..)'.rustdocflags во конфигурацијата Cargo.

  • Rustdoc сега попрецизно ја обработува документацијата.
    Застарените API белешки сега се прикажуваат како редовна документација, без претходната специјална обработка преку white-space: pre-wrap. Дополнително, rustdoc повеќе не прикажува missing_doc_code_examples за елементите во impl, а методите и поврзаните функции сега се одделени во страничната лента за документација.

  • Можни некомпатибилности.
    Изданието содржи неколку промени што може да се појават во нестандардниот код: распоредот на некои #[repr(Int)] enum-ови е поправен во екстремни случаи, а некои бескорисни unsize cast-ови во Pin се оневозможени. , Градбите на WebAssembly сега се уриваат на недефинирани симболи, случајно стабилизираниот атрибут #![reexport_test_harness_main] повторно е блокиран од функции, опцијата -Csoft-float е отстранета, а минималната надворешна LLVM верзија е зголемена на 21. За AVR, типот c_double е променет во f32, бидејќи C double се 32-битни по дифолт на овие цели.

Извор: linux.org.ru

Купете доверлив хостинг за сајтови со DDoS заштита, VPS VDS сервери 🔥 Купете сигурен веб-хостинг со DDoS заштита, VPS VDS сервери | ProHoster