Mozilla-projektin perustama, mutta nyt voittoa tavoittelemattoman Rust Foundationin alaisuudessa kehitetty Rust 1.98 -ohjelmointikieli on julkaistu. Kieli keskittyy muistin turvallisuuteen ja tarjoaa työkaluja tehtävien suorittamisen korkean rinnakkaisuuden saavuttamiseksi ilman roskienkerääjää ja ajonaikaista ympäristöä (ajonaikaista ympäristöä rajoitetaan perusalustukseen ja standardikirjaston ylläpitoon).
Rustin muistinhallintamenetelmät on suunniteltu poistamaan osoittimien käsittelyssä esiintyviä virheitä ja suojaamaan matalan tason muistinhallinnan ongelmilta, kuten muistin käyttämiseltä sen vapauttamisen jälkeen, null-osoittimien viittausten poistamiselta, puskurin ylivuodotuksilta ja niin edelleen. Projektissa kehitetään Cargo-paketinhallintaa kirjastojen jakamiseen, koontien helpottamiseen ja riippuvuuksien hallintaan. Crates.io-arkistoa ylläpidetään kirjastojen isännöintiä varten.
Muistin turvallisuutta tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden, objektien eliniän (laajuuden) kirjaamisen ja muistin käytön oikeellisuuden arvioimisen avulla koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.
Tärkeimmät innovaatiot:
- f32- ja f64-liukulukutyypeille on toteutettu algebralliset menetelmät yhteen-, vähennys-, kerto-, jakolaskulle ja jakojäännöslaskulle, jotka toteuttavat optimointeja, jotka ovat samanlaisia kuin C/C++-kääntäjien "-ffast-math"-valinnassa. Nämä menetelmät mahdollistavat operaatioiden järjestyksen muuttamisen tarvittaessa optimointia, kuten silmukkavektorointia, varten. Esimerkiksi laskettaessa "a + b + c + d" tavallisella yhteenlaskulla, kääntäjä suorittaa laskutoimituksen aina samassa järjestyksessä: "((a + b) + c) + d", mutta algebraic_add-metodilla se voi ryhmitellä lausekkeen "(a + b) + (c + d)" ja suorittaa "(a + b)" ja "(c + d)" rinnakkain SIMD-käskyjen avulla. Algebrallisten menetelmien käytön hintana on laskentatulosten epädeterminismi, joka voi vaihdella virhemarginaalin rajoissa.
- Kaikilla alkeellisilla kokonaislukutyypeillä on sisäänrakennettu "format_into"-metodi numeroiden muuntamiseksi merkkijonoiksi, jota voidaan käyttää itoa-paketin sijaan. Parametrina annetaan NumBuffer-puskuri. , jonka koko on taatusti riittävä kirjoittamaan minkä tahansa käytetyn tyyppisen arvon desimaalimuodossa. Tulosteena on muotoiltu merkkijono &str, jonka elinikä on sidottu puskuriin.
- ManuallyDrop-valjaiden ja Box-älyosoittimen välinen vuorovaikutus ei enää johda määrittelemättömään toimintaan.
- Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
- merkkijono::submerkkijonoalue
- [T]::aliviipaleen_alue
- ydin::fmt::NumBuffer
- <{integer}>::muotoilu_kohteeseen
- Lähetä/Synkronointi std::process::CommandArgs-komennolle
- {fN}::algebrallinen_lisäys
- {fN}::algebrallinen_osa
- {fN}::algebrallinen_mul
- {fN}::algebrallinen_jako
- {fN}::algebrallinen_rem
- NonZero<{integer}>::from_str_radix
- Merkkijono::from_utf16le
- Merkkijono::from_utf16le_lossy
- Merkkijono::from_utf16be
- Merkkijono::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomi ::from_mut
- Atomi ::get_mut_slice
- Atomi ::from_mut_slice
- std::range::legacy
- Kohdealustat thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf ja thumbv8r-none-eabihf on siirretty toiselle tukitasolle, joka sisältää koontitakuun, mutta ei takeita testipaketin läpäisystä.
- Tuki on lisätty powerpc64-unknown-linux-gnuelfv2- ja aarch64-unknown-linux-pauthtest-alustoille, joiden tuki on nyt tasolla 3. Taso 3 sisältää perustuen, mutta ei sisällä automaattista testausta, virallisia koontiversioita tai koontiversioiden tarkistusta.
Lisäksi suosittu crate-paketti arrayref, jota on ladattu yli 53 miljoonaa kertaa viimeisten 90 päivän aikana ja jota 403 pakettia käyttää riippuvuutena, vaarantui. Hyökkääjät lähettivät crates.io-arkistoon uusia haitallista koodia sisältäviä paketteja: proc-macro1, proc-macro-en, aovine, arone, aronenao ja tinymember. Myöhemmin arkistoon julkaistiin uudet arrayref 0.3.10:n, internment 0.8.7:n ja append-only-vec 0.1.9:n versiot, joihin kaikkiin lisättiin haitallinen proc-macro1-paketti riippuvuutena. arrayref-paketin haitallinen versio julkaistiin 20. elokuuta klo 10.15 (MSK) ja pysyi aktiivisena klo 11.41 asti, minkä jälkeen crates.io:n ylläpitäjät poistivat sen.
Arrayrefin ylläpitäjään ei ole vielä otettu yhteyttä tilanteen selvittämiseksi, mutta uskotaan, että hyökkääjät sieppasivat heidän tunnistetietonsa. Proc-macro1-paketin rakennusskriptissä oli haitallinen muutos, joka latasi suoritettavan tiedoston ulkoisesta hakemistosta. palvelinLadattu tiedosto tallennettiin nimellä /tmp/rust-setup Unix-järjestelmissä ja Windows — %TEMP%\rust-setup.ps1 tai %TEMP%\rust-setup-launch.vbs.
Lähde: opennet.ru
