Rja 1.96.0

Izdaja je bila objavljena Rja 1.96.0 — najnovejša stabilna različica programskega jezika Rust. Posodobitev je bila izdana. 28 maja 2026 leto; namestite ga lahko s standardnim ukazom rustup update stable. Glavne spremembe vključujejo nove tipe obsegov v core::range, stabilizacijo makrov za ujemanje vzorcev, izboljšanje vedenja gradnje WebAssembly in popravke dveh ranljivosti v Cargo.

Večje spremembe

  • Novi tipi območij core::range::Range*.
    V standardni knjižnici so stabilizirani novi tipi območij: core::range::Range, RangeFrom, RangeInclusive in njihovi povezani iteratorji. Za razliko od starih tipov iz core::ops novi tipi območij ne implementirajo Iteratorja neposredno, temveč se pretvorijo v iterator prek IntoIteratorja. To omogoča kopiranje teh območij, kar je na primer priročno pri shranjevanju obsega kot strukturnega polja. Sintaksa, kot je 0..1, trenutno ustvarja stare tipe območij, vendar je načrtovana njena selitev v nove tipe v prihodnji različici jezika.

  • Dodani assert_matches! in debug_assert_matches!.
    Novi makri omogočajo preverjanje, ali se vrednost ujema z danim vzorcem. To je po konceptu podobno funkciji assert!(matches!(…)), vendar se v primeru napake izpiše predstavitev vrednosti za odpravljanje napak, kar poenostavi diagnostiko. Ti makri niso bili dodani v Prelude, da bi se izognili konfliktom s priljubljenimi paketi drugih proizvajalcev, zato jih je treba izrecno uvoziti iz core ali std.

  • Spremenjeno je bilo vedenje ciljev WebAssembly.
    Rust ne posreduje več parametra --allow-undefined povezovalniku za gradnje WebAssembly. Nedefinirani simboli se zdaj med povezovanjem obravnavajo kot napake, namesto da se samodejno pretvorijo v uvoze iz modula »env«. To bi moralo prej zaznati napake pri gradnji in neveljavna imena simbolov. Staro vedenje je mogoče po potrebi razveljaviti z uporabo RUSTFLAGS=-Clink-arg=--allow-undefined ali z izrecno določitvijo uvoženega modula wasm z uporabo #[link(wasm_import_module = "env")].

  • Cargo je prejel varnostne popravke.
    Rust 1.96.0 odpravlja dve ranljivosti, ki vplivata na uporabnike registrov tretjih oseb. CVE-2026-5223 V zvezi z ravnanjem s simboličnimi povezavami znotraj arhivskih datotek: zlonamerni paket iz registra tretje osebe lahko prepiše predpomnilnik drugega paketa iz istega registra. Od različice Rust 1.96.0 naprej Cargo zavrača arhive, ki vsebujejo simbolične povezave. CVE-2026-5222 Ta težava se nanaša na normalizacijo URL-jev v redkem registru in lahko v redkih primerih povzroči, da se žeton Cargo pošlje v zlonamerni register. Po navedbah ekipe Rust te težave ne vplivajo na uporabnike crates.io.

  • Spremembe v jeziku.
    Izdaja vključuje: Nekaj ​​manjših popravkov in izboljšav: dovoljeno posredovanje metaspremenljivk expr makrov v cfg, popravljeno pretvarjanje tipov nikoli v izrazih naborov, odpravljeni redki primeri napačnih namigov za sklepanje tipov za argumente funkcij, dodana podpora za vektorske registre s390x v linijskem sestavljanju in ponovno dovoljene konstante ManuallyDrop kot predloge – to odpravlja regresijo, uvedeno v Rustu 1.94.0.

  • Spremembe v prevajalniku in platformah.
    Za LinuxZa cilje LoongArch je bila omogočena podpora za sprostitev povezav – optimizacija povezovanja, ki poenostavi nekatere prehode in klice po uvedbi kode. Za riscv64gc-unknown-fuchsia je bila osnovna konfiguracija posodobljena na profil RVA22 s podporo za vektorske razširitve.

  • Standardne posodobitve knjižnice.
    Dodana je bila podpora za iteriranje po neničelnih celih številskih območjih. Odpravljena je bila tudi lenobna obravnava naslovov gostiteljev v SGX prek funkcije ToSocketAddr, definicija "berljivega/zapisljivega" pomnilnika pa je bila pojasnjena v dokumentaciji in notranjih pogodbah: ničelni kazalec je bil odstranjen iz splošne definicije, izjeme pa so zdaj določene ločeno za posamezne metode.

  • Stabilizirani API-ji.
    Med stabiliziranimi vmesniki so assert_matches!, debug_assert_matches!, implementacije From za AssertUnwindSafe , Lenja celica in LazyLock , kot tudi nove tipe obsegov in iteratorje iz core::range, vključno z Range, RangeFrom, RangeToInclusive in njihovimi iteratorji.

  • Tovor: Spremembe odvisnosti in dokumentacije.
    Odvisnost lahko zdaj določa tako repozitorij Git kot alternativni register: različica Git bo uporabljena lokalno, različica registra pa med objavljanjem, podobno kot pri crates.io. Dodana je bila tudi podpora za target.'cfg(..)'.rustdocflags v konfiguraciji Cargo.

  • Rustdoc zdaj natančneje obravnava dokumentacijo.
    Zastarele opombe API-ja so zdaj prikazane kot običajna dokumentacija, brez prejšnje posebne obdelave s predhodnim zavijanjem white-space:. Poleg tega rustdoc ne išče več missing_doc_code_examples za elemente znotraj impl, metode in povezane funkcije pa so zdaj ločene v stranski vrstici dokumentacije.

  • Možne nezdružljivosti.
    Izdaja vsebuje več sprememb, ki se lahko pojavijo v nestandardni kodi: postavitev nekaterih naštevanj #[repr(Int)] je bila v skrajnih primerih popravljena, nekatere neuporabne pretvorbe brez spreminjanja velikosti v Pin pa so bile onemogočene. , gradnje WebAssembly se zdaj sesujejo pri nedefiniranih simbolih, pomotoma stabiliziran atribut #![reexport_test_harness_main] je bil ponovno omejen s funkcijami, možnost -Csoft-float je bila odstranjena, minimalna zunanja različica LLVM pa je bila povečana na 21. Za AVR je bil tip c_double spremenjen v f32, ker so dvojni elementi C na teh ciljih privzeto 32-bitni.

Vir: linux.org.ru

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster