Rđa 1.96.0

Izdanje je objavljeno Rđa 1.96.0 — najnovija stabilna verzija programskog jezika Rust. Ažuriranje je objavljeno. 28 maj 2026 godina; može se instalirati pomoću standardne rustup update stable naredbe. Glavne promjene uključuju nove tipove raspona u core::range, stabilizaciju makroa za usklađivanje uzoraka, pooštravanje ponašanja pri izgradnji WebAssembly-ja i ispravke za dvije ranjivosti u Cargo-u.

Glavne promjene

  • Novi tipovi raspona core::range::Range*.
    Novi tipovi raspona su stabilizirani u standardnoj biblioteci: core::range::Range, RangeFrom, RangeInclusive i njihovi pridruženi iteratori. Za razliku od starih tipova iz core::ops, novi rasponi ne implementiraju Iterator direktno, već se pretvaraju u iterator putem IntoIterator. Ovo omogućava kopiranje ovih raspona, što je zgodno, na primjer, prilikom pohranjivanja raspona kao strukturnog polja. Sintaksa poput 0..1 trenutno kreira stare tipove raspona, ali se planira migracija na nove tipove u budućoj verziji jezika.

  • Dodane su opcije assert_matches! i debug_assert_matches!.
    Novi makroi vam omogućavaju da provjerite da li vrijednost odgovara zadatom obrascu. Ovo je slično konceptu kao assert!(matches!(…)), ali u slučaju greške, ispisuje se debug prikaz vrijednosti, što pojednostavljuje dijagnostiku. Ovi makroi nisu dodani u Prelude kako bi se izbjegli sukobi s popularnim paketima trećih strana, tako da se moraju eksplicitno uvesti iz core-a ili std-a.

  • Promijenjeno je ponašanje WebAssembly ciljeva.
    Rust više ne prosljeđuje --allow-undefined linkeru za WebAssembly verzije. Nedefinisani simboli se sada tretiraju kao greške tokom linkovanja, umjesto da se automatski konvertuju u uvoze iz "env" modula. Ovo bi trebalo ranije prepoznati greške pri izgradnji i nevažeća imena simbola. Staro ponašanje se može vratiti, ako je potrebno, korištenjem RUSTFLAGS=-Clink-arg=--allow-undefined ili eksplicitnim navođenjem uvezenog wasm modula korištenjem #[link(wasm_import_module = "env")].

  • Cargo je dobio sigurnosne ispravke.
    Rust 1.96.0 ispravlja dvije ranjivosti koje utiču na korisnike registara trećih strana. CVE-2026-5223 Vezano za rukovanje simboličkim linkovima unutar tarballova crate-ova: zlonamjerni paket iz registra treće strane mogao bi prepisati keš memoriju drugog paketa iz istog registra. Počevši od Rusta 1.96.0, Cargo odbacuje crate arhive koje sadrže simboličke linkove. CVE-2026-5222 Ovaj problem se odnosi na normalizaciju URL-ova u rijetkom registru i, u rijetkim okolnostima, može rezultirati slanjem Cargo tokena u zlonamjerni registar. Prema Rust timu, korisnici crates.io nisu pogođeni ovim problemima.

  • Promjene u jeziku.
    Izdanje uključuje: Nekoliko manjih ispravki i poboljšanja: Omogućeno je prosljeđivanje metavarijabli expr makroa u cfg, ispravljeno je never-type casting u tuple izrazima, ispravljeni su rijetki slučajevi netačnih savjeta o tipovima za argumente funkcije, dodana je podrška za s390x vektorske registre u inline asembleru i ponovo su dozvoljene konstante ManuallyDrop kao predlošci - ovo ispravlja regresiju uvedenu u Rustu 1.94.0.

  • Promjene u kompajleru i platformama.
    Do LinuxPodrška za opuštanje linkova je omogućena za LoongArch ciljeve - optimizacija povezivanja koja pojednostavljuje neke prijelaze i pozive nakon implementacije koda. Za riscv64gc-unknown-fuchsia, osnovna konfiguracija je ažurirana na RVA22 profil s podrškom za vektorska proširenja.

  • Standardna ažuriranja biblioteke.
    Dodana je podrška za iteraciju preko cijelih brojeva koji nisu nula. Također je ispravljeno lijeno rukovanje adresama hostova u SGX-u putem ToSocketAddr, a definicija "čitljive/pisive" memorije je razjašnjena u dokumentaciji i internim ugovorima: nulti pokazivač je uklonjen iz opće definicije, a izuzeci se sada specificiraju odvojeno za specifične metode.

  • Stabilizirani API-ji.
    Među stabiliziranim interfejsima su assert_matches!, debug_assert_matches!, implementacije From za AssertUnwindSafe , LazyCell i LazyLock , kao i nove tipove raspona i iteratore iz core::range, uključujući Range, RangeFrom, RangeToInclusive i njihove iteratore.

  • Cargo: Promjene u zavisnostima i dokumentaciji.
    Zavisnost sada može specificirati i Git repozitorij i alternativni registar: Git verzija će se koristiti lokalno, a verzija registra će se koristiti tokom objavljivanja, slično ponašanju sa crates.io. Dodana je i podrška za target.'cfg(..)'.rustdocflags u Cargo konfiguraciji.

  • Rustdoc sada preciznije obrađuje dokumentaciju.
    Zastarjele API bilješke se sada prikazuju kao redovna dokumentacija, bez prethodne posebne obrade putem white-space: pre-wrap. Osim toga, rustdoc više ne prati missing_doc_code_examples za elemente unutar impl-a, a metode i pridružene funkcije su sada odvojene u bočnoj traci dokumentacije.

  • Moguće nekompatibilnosti.
    Izdanje sadrži nekoliko promjena koje se mogu pojaviti u nestandardnom kodu: raspored nekih #[repr(Int)] nabrajanja je ispravljen u ekstremnim slučajevima, a neka beskorisna pretvaranja bez promjene veličine u Pinu su onemogućena. , WebAssembly verzije sada padaju na nedefinisanim simbolima, slučajno stabilizovani atribut #![reexport_test_harness_main] je ponovo ograničen funkcijama, opcija -Csoft-float je uklonjena, a minimalna eksterna LLVM verzija je povećana na 21. Za AVR, tip c_double je promijenjen na f32, budući da su C double-ovi 32-bitni po defaultu na ovim ciljevima.

izvor: linux.org.ru

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster