Հրապարակումը հրապարակվել է Ժանգ 1.96.0 — Rust ծրագրավորման լեզվի վերջին կայուն տարբերակը։ Թարմացումը թողարկվել է։ 28 Մայիս 2026 տարի; այն կարող է տեղադրվել ստանդարտ 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-ին՝ երրորդ կողմի հայտնի crates-ների հետ կոնֆլիկտներից խուսափելու համար, ուստի դրանք պետք է հստակորեն ներմուծվեն core-ից կամ 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- ը Ինչ վերաբերում է crate tarball-ներում սիմվոլիկ հղումների մշակմանը. երրորդ կողմի գրանցամատյանից ստացված վնասակար փաթեթը կարող է վերագրել նույն գրանցամատյանից ստացված մեկ այլ փաթեթի քեշը: Սկսած Rust 1.96.0 տարբերակից, Cargo-ն մերժում է սիմվոլիկ հղումներ պարունակող crate արխիվները: CVE-2026-5222- ը Այս խնդիրը վերաբերում է URL-ների նորմալացմանը նոսր գրանցամատյանում և, հազվադեպ դեպքերում, կարող է հանգեցնել Cargo տոկենի ուղարկմանը վնասակար գրանցամատյան: Rust թիմի տվյալներով՝ crates.io օգտատերերը չեն տուժում այս խնդիրներից:

  • Լեզվի փոփոխություններ։
    Թողարկումը ներառում է. Մի քանի աննշան շտկումներ և բարելավումներ. թույլատրվեց մակրոների expr մետափոխանակիչները փոխանցել cfg-ին, ուղղվեց զույգ արտահայտություններում երբեք տիպի չփոխանցման խնդիրը, շտկվեցին ֆունկցիայի արգումենտների համար սխալ տիպի եզրակացության հուշումների հազվագյուտ դեպքերը, ավելացվեց s390x վեկտորային գրանցամատյանների աջակցությունը տողային ասեմբլերում և կրկին թույլատրվեց ManuallyDrop հաստատունները որպես ձևանմուշներ. սա շտկեց Rust 1.94.0-ում ներկայացված ռեգրեսիան։

  • Կոմպիլյատորի և հարթակների փոփոխություններ։
    Համար LinuxLoongArch թիրախների համար միացվել է հղումների թուլացման աջակցություն՝ հղումների օպտիմալացում, որը պարզեցնում է որոշ անցումներ և կանչեր կոդի տեղակայումից հետո: riscv64gc-unknown-fuchsia-ի համար հիմնական կոնֆիգուրացիան թարմացվել է RVA22 պրոֆիլին՝ վեկտորային ընդլայնումների աջակցությամբ:

  • Գրադարանի ստանդարտ թարմացումներ։
    Ավելացվել է ոչ զրոյական ամբողջ թվերի միջակայքերում իտերացիայի աջակցություն: Ուղղվել է նաև SGX-ում ToSocketAddr-ի միջոցով հոսթ հասցեների դանդաղ մշակման խնդիրը, և «կարդացվող/գրելի» հիշողության սահմանումը պարզաբանվել է փաստաթղթերում և ներքին պայմանագրերում. զրոյական ցուցիչը հանվել է ընդհանուր սահմանումից, և բացառություններն այժմ առանձին են նշված որոշակի մեթոդների համար:

  • Կայունացված API-ներ։
    Կայունացված ինտերֆեյսների շարքում են assert_matches!, debug_assert_matches!, From-ի իրականացումները։ AssertUnwindSafe-ի համար , LazyCell և LazyLock-ը , ինչպես նաև core::range-ի նոր տիրույթների տեսակներ և իտերատորներ, ներառյալ Range, RangeFrom, RangeToInclusive և դրանց իտերատորները։

  • Բեռ. կախվածությունների և փաստաթղթերի փոփոխություններ։
    Կախվածությունն այժմ կարող է նշել և՛ Git պահոց, և՛ այլընտրանքային գրանցամատյան. Git տարբերակը կօգտագործվի տեղայնորեն, իսկ գրանցամատյանի տարբերակը՝ հրապարակման ժամանակ, նման crates.io-ի դեպքում գործողությանը: Ավելացվել է նաև Cargo կոնֆիգուրացիայում target.'cfg(..)'.rustdocflags-ի աջակցությունը:

  • Rustdoc-ը այժմ ավելի ճշգրիտ է մշակում փաստաթղթերը։
    Հնացած API նշումները այժմ ներկայացվում են որպես սովորական փաստաթղթեր՝ առանց նախկինում white-space: pre-wrap-ի միջոցով կատարված հատուկ մշակման: Բացի այդ, rustdoc-ը այլևս չի ցուցադրում missing_doc_code_examples-ը impl-ի ներսում գտնվող տարրերի համար, իսկ մեթոդներն ու դրանց հետ կապված ֆունկցիաները այժմ առանձնացված են փաստաթղթերի կողային վահանակում:

  • Հնարավոր անհամատեղելիություններ։
    Թողարկումը պարունակում է մի քանի փոփոխություններ, որոնք կարող են հայտնվել ոչ ստանդարտ կոդում. ծայրահեղ դեպքերում շտկվել է որոշ #[repr(Int)] թվարկումների դասավորությունը, իսկ Pin-ում որոշ անօգուտ չչափազանցված cast-եր անջատվել են։ , WebAssembly կառուցվածքները այժմ խափանվում են անորոշ սիմվոլների դեպքում, պատահաբար կայունացված #![reexport_test_harness_main] ատրիբուտը կրկին արգելափակվել է, -Csoft-float տարբերակը հեռացվել է, իսկ արտաքին LLVM նվազագույն տարբերակը մեծացվել է մինչև 21: AVR-ի համար c_double տեսակը փոխվել է f32-ի, քանի որ C double-ները լռելյայնորեն 32-բիթանոց են այս թիրախների վրա:

Source: linux.org.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster