Rusto 1.96.0

La eldono estis publikigita Rusto 1.96.0 — la plej nova stabila versio de la programlingvo Rust. La ĝisdatigo estis publikigita. 28 Majo 2026 jaroj; ĝi povas esti instalita per la norma komando rustup update stable. La ĉefaj ŝanĝoj inkluzivas novajn intervalajn tipojn en core::range, stabiligon de ŝablonakordigaj makrooj, plifortigon de la konstrua konduto de WebAssembly, kaj korektojn por du vundeblecoj en Cargo.

Gravaj ŝanĝoj

  • Novaj intervaltipoj core::range::Range*.
    Novaj intervaltipoj estas stabiligitaj en la norma biblioteko: core::range::Range, RangeFrom, RangeInclusive, kaj iliaj asociitaj iteratoroj. Male al la malnovaj tipoj de core::ops, la novaj intervaloj ne efektivigas Iterator rekte, sed estas konvertitaj al iteratoro per IntoIterator. Ĉi tio permesas, ke ĉi tiuj intervaloj estu Kopieblaj, kio estas oportuna, ekzemple, kiam oni konservas intervalon kiel strukturkampon. Sintakso kiel 0..1 nuntempe kreas la malnovajn intervaltipojn, sed estas planite migri al la novaj tipoj en estonta versio de la lingvo.

  • Aldonis assert_matches! kaj debug_assert_matches!.
    Novaj makrooj permesas al vi kontroli ĉu valoro kongruas kun donita ŝablono. Ĉi tio estas simila laŭ koncepto al assert!(matches!(…)), sed kaze de eraro, sencimiga prezento de la valoro estas presita, simpligante diagnozon. Ĉi tiuj makrooj ne estis aldonitaj al Prelude por eviti konfliktojn kun popularaj triapartaj kestoj, do ili devas esti eksplicite importitaj de core aŭ std.

  • Ŝanĝis la konduton de WebAssembly-celoj.
    Rust jam ne transdonas --allow-undefined al la ligilo por WebAssembly-konstruoj. Nedifinitaj simboloj nun estas traktataj kiel eraroj dum ligado, anstataŭ esti aŭtomate konvertitaj al importadoj el la modulo "env". Ĉi tio devus kapti konstruajn erarojn kaj malvalidajn simbolonomojn pli frue. La malnova konduto povas esti malfarita, se necese, uzante RUSTFLAGS=-Clink-arg=--allow-undefined aŭ eksplicite specifante la importitan wasm-modulon uzante #[link(wasm_import_module = "env")].

  • Kargo ricevis sekurecajn korektojn.
    Rust 1.96.0 riparas du vundeblecojn, kiuj influas uzantojn de triapartaj registroj. CVE-2026-5223 Rilate al la pritraktado de simbolligiloj ene de kestaj tar-dosieroj: malica pakaĵo el triaparta registro povus anstataŭigi la kaŝmemoron de alia pakaĵo el la sama registro. Ekde Rust 1.96.0, Cargo malakceptas kestajn arkivojn enhavantajn simbolligilojn. CVE-2026-5222 Ĉi tiu problemo rilatas al URL-normaligo en la maldensa registro kaj, sub maloftaj cirkonstancoj, povus rezultigi sendon de Cargo-ĵetono al malica registro. Laŭ la Rust-teamo, uzantoj de crates.io ne estas trafitaj de ĉi tiuj problemoj.

  • Ŝanĝoj en lingvo.
    La eldono inkluzivas: Pluraj malgrandaj korektoj kaj plibonigoj: Permesis transdoni metavariablojn "expr" de makrooj al cfg, korektis neniam-tipan konverton en tuplaj esprimoj, riparis maloftajn kazojn de malĝustaj tipinferencaj sugestoj por funkciaj argumentoj, aldonis subtenon por vektoraj registroj s390x en enlinia asembleo, kaj repermesis konstantojn "ManuallyDrop" kiel ŝablonojn — tio korektas regreson enkondukitan en Rust 1.94.0.

  • Ŝanĝoj en kompililo kaj platformoj.
    Por LinuxSubteno por liglilmalstreĉiĝo estas ebligita por celoj de LoongArch — ligliloptimigo kiu simpligas iujn transirojn kaj vokojn post koddeplojo. Por riscv64gc-unknown-fuchsia, la baza agordo estas ĝisdatigita al la RVA22-profilo kun subteno por vektoraj etendaĵoj.

  • Normaj bibliotekaj ĝisdatigoj.
    Subteno por iteracio super ne-nulaj entjeraj intervaloj estis aldonita. Mallaborema manipulado de gastigaj adresoj en SGX per ToSocketAddr ankaŭ estis riparita, kaj la difino de "legebla/skribebla" memoro estis klarigita en la dokumentado kaj internaj kontraktoj: la nula montrilo estis forigita de la ĝenerala difino, kaj esceptoj nun estas specifitaj aparte por specifaj metodoj.

  • Stabiligitaj API-oj.
    Inter la stabiligitaj interfacoj estas assert_matches!, debug_assert_matches!, efektivigoj de From por AssertUnwindSafe , Mallaborema Ĉelo kaj LazyLock , kaj ankaŭ novaj intervaltipoj kaj iteratoroj el core::range, inkluzive de Range, RangeFrom, RangeToInclusive kaj iliaj iteratoroj.

  • Kargo: Ŝanĝoj al dependecoj kaj dokumentado.
    Dependeco nun povas specifi kaj Git-deponejon kaj alternativan registron: la Git-versio estos uzata loke, kaj la registro-versio estos uzata dum publikigo, simile al la konduto kun crates.io. Subteno por target.'cfg(..)'.rustdocflags en la Cargo-agordo ankaŭ estis aldonita.

  • Rustdoc nun traktas dokumentadon pli precize.
    Malrekomenditaj API-notoj nun estas montrataj kiel regula dokumentado, sen la antaŭa speciala prilaborado per white-space: pre-wrap. Krome, rustdoc jam ne forigas missing_doc_code_examples por elementoj ene de impl, kaj metodoj kaj rilataj funkcioj nun estas apartigitaj en la flanka kolumno de la dokumentado.

  • Eblaj nekongruecoj.
    La eldono enhavas plurajn ŝanĝojn, kiuj povus aperi en nenorma kodo: la aranĝo de iuj #[repr(Int)] enumoj estis riparita en ekstremaj kazoj, kaj iuj senutilaj malgrand-konvertiĝoj en Pin estis malŝaltitaj. , WebAssembly-konstruoj nun kraŝas ĉe nedifinitaj simboloj, la hazarde stabiligita atributo #![reexport_test_harness_main] denove estas trajtekligita, la opcio -Csoft-float estas forigita, kaj la minimuma ekstera LLVM-versio estas pliigita al 21. Por AVR, la tipo c_double estas ŝanĝita al f32, ĉar C-duobloj estas 32-bitaj defaŭlte ĉe ĉi tiuj celoj.

fonto: linux.org.ru

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster