Руст 1.96.0

Издање је објављено Руст 1.96.0 — најновија стабилна верзија програмског језика Rust. Ажурирање је објављено. КСНУМКС мај године КСНУМКС; може се инсталирати помоћу стандардне команде rustup update stable. Главне промене укључују нове типове опсега у core::range, стабилизацију макроа за подударање образаца, пооштравање понашања WebAssembly изградње и исправке за две рањивости у Cargo-у.

Велике промене

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

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

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

  • Карго је добио безбедносне исправке.
    Rust 1.96.0 исправља две рањивости које погађају кориснике регистара трећих страна. ЦВЕ-КСНУМКС-КСНУМКС У вези са руковањем симболичким линковима унутар tarball-ова crate-а: злонамерни пакет из регистра треће стране могао би да пребрише кеш меморију другог пакета из истог регистра. Почевши од Rust-а 1.96.0, Cargo одбацује crate архиве које садрже симболичке линкове. ЦВЕ-КСНУМКС-КСНУМКС Овај проблем се односи на нормализацију URL-ова у ретко доступном регистру и, у ретким околностима, може довести до слања Cargo токена у злонамерни регистар. Према речима Rust тима, корисници crates.io нису погођени овим проблемима.

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

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

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

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

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

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

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

Извор: линук.орг.ру

Купите поуздан хостинг за сајтове са ДДоС заштитом, ВПС ВДС сервере 🔥 Купите поуздан веб хостинг са DDoS заштитом, VPS VDS сервере | ProHoster