Rust 1.66 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.66, joka on perustettu Mozilla-projektilla, mutta nyt kehitetty riippumattoman voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa, on julkaistu. Kieli keskittyy muistin turvallisuuteen ja tarjoaa välineet korkean työn rinnakkaisuuden saavuttamiseen välttäen samalla roskankeräimen ja ajonajan käyttöä (ajoaika rajoittuu vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin muistinkäsittelymenetelmät säästävät kehittäjää virheiltä osoittimia käsiteltäessä ja suojaavat ongelmilta, jotka johtuvat matalan tason muistin käsittelystä, kuten muistialueen käyttäminen sen vapauttamisen jälkeen, nollaosoittimien viittauksen poistaminen, puskurin ylitykset jne. Kirjastojen jakelua, koontiversioiden tarjoamista ja riippuvuuksien hallintaa varten projekti kehittää Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

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:

  • Luetteloissa, joissa on kokonaislukuesitys ("#[repr(Int)]"-attribuutti), erottimen eksplisiittinen ilmoittaminen (luettelon muunnelman numero) on sallittu, vaikka luettelo sisältää kenttiä. #[repr(u8)] enum Foo { A(u8), # erotteleva 0 B(i8), # erotteleva 1 C(bool) = 42, # diskriminantti 42 }
  • Lisätty funktiocore::hint::black_box, joka yksinkertaisesti palauttaa vastaanotetun arvon. Koska kääntäjä luulee, että tämä toiminto tekee jotain, black_box-funktiota voidaan käyttää kääntäjien optimoinnin poistamiseen silmukoille suoritettaessa koodin suorituskyvyn testausta tai tutkittaessa generoitua konekoodia (jotta kääntäjä ei pidä koodia käyttämättömänä ja poista sitä). Esimerkiksi alla olevassa esimerkissä black_box(v.as_ptr()) estää kääntäjää ajattelemasta, että vektoria v ei käytetä. käytä std::vint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • "Cargo"-paketinhallinta tarjoaa "remove"-komennon, jonka avulla voit poistaa riippuvuuksia Cargo.toml-luettelosta komentoriviltä.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • proc_macro::Span::lähdeteksti
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{ensimmäinen_avaimen_arvo, viimeinen_avaimen_arvo, ensimmäinen_syöttö, viimeinen_syöttö, pop_ensimmäinen, pop_viimeinen}
    • Lisää AsFd-toteutuksia stdio-lukkotyypeille käytettäessä WASI:ta.
    • impl TryFrom > Boxille<[T; N]>
    • core::vint::black_box
    • Kesto::try_from_secs_{f32,f64}
    • Vaihtoehto::unzip
    • std::os::fd
  • Alueet "..X" ja "..=X" ovat sallittuja malleissa.
  • Kun rakennetaan rustc-kääntäjän etuosaa ja LLVM-taustaosaa, LTO- (Link Time Optimization)- ja BOLT-optimointitiloja (Binary Optimization and Layout Tool) käytetään lisäämään tuloksena olevan koodin suorituskykyä ja vähentämään muistin kulutusta.
  • Toteutettu tason 5 tuki armv5te-none-eabi- ja thumbvXNUMXte-none-eabi-alustoille. Kolmas taso tarkoittaa perustukea, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista ja koodin rakentamiskyvyn tarkistamista.
  • Lisätty tuki linkittämiselle macOS Generic Libraries -kirjastoihin.

Lisäksi voimme huomata Rust-kielen käyttöliittymäkääntäjän (gccrs) sisällyttämisen GCC-koodikantaan. Käyttöliittymä sisältyy GCC 13 -haaraan, joka julkaistaan ​​toukokuussa 2023. GCC 13:sta alkaen standardia GCC-työkalupakkia voidaan käyttää Rust-ohjelmien kääntämiseen ilman, että tarvitsee asentaa rustc-kääntäjää, joka on rakennettu käyttämällä LLVM-kehitystä. GCC 13:n Rust-toteutus on beta-tilassa, ei oletuksena käytössä.

Lähde: opennet.ru

Lisää kommentti