Julkaisu on julkaistu Ruoste 1.96.0 — Rust-ohjelmointikielen uusin vakaa versio. Päivitys on julkaistu. 28 Toukokuu 2026 vuosi; se voidaan asentaa käyttämällä rustup update stable -vakiokomentoa. Tärkeimpiä muutoksia ovat uudet aluetyypit core::range-alueessa, kuvioiden yhteensovitusmakrojen vakauttaminen, WebAssemblyn koontitoiminnan tiukentaminen ja kahden Cargon haavoittuvuuden korjaukset.
Suuret muutokset
Uudet aluetyypit core::range::Range*.
Uudet aluetyypit on vakiinnutettu standardikirjastossa: core::range::Range, RangeFrom, RangeInclusive ja niihin liittyvät iteraattorit. Toisin kuin vanhat core::ops-tyypit, uudet alueet eivät toteuta Iteraattoria suoraan, vaan ne muunnetaan iteraattoriksi IntoIteratorin kautta. Tämä mahdollistaa näiden alueiden kopioinnin, mikä on kätevää esimerkiksi silloin, kun aluetta tallennetaan rakennekenttänä. Syntaksi, kuten 0..1, luo tällä hetkellä vanhat aluetyypit, mutta se on tarkoitus siirtää uusiin tyyppeihin kielen tulevassa versiossa.Lisätty assert_matches! ja debug_assert_matches!.
Uusien makrojen avulla voit tarkistaa, että arvo vastaa tiettyä mallia. Tämä on periaatteeltaan samanlainen kuin assert!(matches!(…)), mutta virheen sattuessa tulostetaan arvon virheenkorjausesitys, mikä yksinkertaistaa diagnostiikkaa. Näitä makroita ei lisätty Preludeen ristiriitojen välttämiseksi suosittujen kolmannen osapuolen laatikoiden kanssa, joten ne on tuotava erikseen ytimestä tai standardiversiosta.Muutti WebAssembly-kohteiden toimintaa.
Rust ei enää välitä --allow-undefined-valitsinta linkittäjille WebAssembly-koonnuksissa. Määrittelemättömiä symboleja käsitellään nyt virheinä linkityksen aikana sen sijaan, että ne muunnetaan automaattisesti "env"-moduulista tuoduiksi symboleiksi. Tämän pitäisi havaita koontivirheet ja virheelliset symbolien nimet aikaisemmin. Vanha toimintatapa voidaan tarvittaessa palauttaa käyttämällä RUSTFLAGS=-Clink-arg=--allow-undefined tai määrittämällä tuotu wasm-moduuli erikseen käyttämällä #[link(wasm_import_module = "env")] -metodia.Cargoon on tehty turvakorjauksia.
Kielen muutokset.
Julkaisu sisältää: Useita pieniä korjauksia ja parannuksia: Sallittu makroiden expr-metamuuttujien välittäminen cfg:lle, korjattu tuple-lausekkeiden never-type-muunnos, korjattu harvinaisia virheellisiä tyypin päättelyvihjeitä funktioargumenteille, lisätty tuki s390x-vektorirekistereille inline-kokoonpanossa ja sallittu uudelleen ManuallyDrop-vakiot pohjina – tämä korjaa Rust 1.94.0:ssa käyttöön otetun regressio-ongelman.Muutokset kääntäjässä ja alustoissa.
varten LinuxLoongArch-kohteille on otettu käyttöön linkkien relaksoinnin tuki – linkityksen optimointi, joka yksinkertaistaa joitakin siirtymiä ja kutsuja koodin käyttöönoton jälkeen. riscv64gc-unknown-fuchsia-mallin peruskonfiguraatiota on päivitetty RVA22-profiiliin, joka tukee vektorilaajennuksia.Vakiokirjaston päivitykset.
Tuki iteraatiolle nollasta poikkeavien kokonaislukualueiden yli on lisätty. Isäntäosoitteiden laiska käsittely SGX:ssä ToSocketAddr-metodin kautta on myös korjattu, ja "luettavan/kirjoitettavan" muistin määritelmää on selvennetty dokumentaatiossa ja sisäisissä sopimuksissa: null-osoitin on poistettu yleisestä määritelmästä, ja poikkeukset on nyt määritelty erikseen tietyille metodeille.Stabiloidut API:t.
Vakautettujen rajapintojen joukossa ovat assert_matches!, debug_assert_matches!, From-toteutukset AssertUnwindSafelle , LazyCell ja LazyLock , sekä uusia aluetyyppejä ja iteraattoreita core::range-rakenteesta, mukaan lukien Range, RangeFrom, RangeToInclusive ja niiden iteraattorit.Rahti: Muutoksia riippuvuuksiin ja dokumentaatioon.
Riippuvuus voi nyt määrittää sekä Git-repositorion että vaihtoehtoisen rekisterin: Git-versiota käytetään paikallisesti ja rekisteriversiota julkaisun aikana, samalla tavalla kuin crates.io:n kanssa. Myös Cargo-kokoonpanoon on lisätty tuki target.'cfg(..)'.rustdocflags-funktiolle.Rustdoc käsittelee nyt dokumentaatiota tarkemmin.
Vanhentuneet API-huomautukset renderöidään nyt tavallisena dokumentaationa ilman aiempaa erityiskäsittelyä välilyöntien esivalinnan avulla. Lisäksi rustdoc ei enää tyhjennä missing_doc_code_examples-tiedostoa impl-tiedoston sisällä oleville elementeille, ja metodit ja niihin liittyvät funktiot on nyt eroteltu dokumentaation sivupalkissa.Mahdollisia yhteensopimattomuuksia.
Julkaisu sisältää useita muutoksia, jotka saattavat näkyä epästandardissa koodissa: joidenkin #[repr(Int)]-enumien asettelua on korjattu äärimmäisissä tapauksissa, ja jotkin turhat Pin-koodin koonmuutosoperaatiot on poistettu käytöstä. WebAssembly-koontiversiot kaatuvat nyt määrittelemättömien symbolien kohdalla, vahingossa vakiintunut #![reexport_test_harness_main]-attribuutti on jälleen ominaisuusrajoitettu, -Csoft-float-vaihtoehto on poistettu ja ulkoisen LLVM:n vähimmäisversiota on nostettu versioon 21. AVR:ssä c_double-tyyppiä on muutettu arvoon f32, koska C-tuplakoodit ovat oletusarvoisesti 32-bittisiä näissä kohteissa.
Lähde: linux.org.ru
