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:
- Kokonaislukuesitystä käyttävissä luetteloissa (attribuutti "#[repr(Int)]") erottimen (variantin numeron luettelossa) eksplisiittinen määrittäminen on sallittua, vaikka luettelossa olisi kenttiä. #[repr(u8)] enum Foo { A(u8), # erottimen 0 B(i8), # erottimen 1 C(bool) = 42, # erottimen 42 }
- Lisätty core::hint::black_box, funktio, joka yksinkertaisesti palauttaa vastaanottamansa arvon. Koska kääntäjä olettaa tämän funktion suorittavan tietyn toiminnon, black_box-funktiota voidaan käyttää kääntäjän silmukan optimoinnin poistamiseen käytöstä koodia vertailtaessa tai luotua konekoodia tutkittaessa (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()):n määrittäminen estää kääntäjää olettamasta, että vektori v on käyttämätön. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- Cargo-paketinhallinta tarjoaa nyt "remove"-komennon, jonka avulla voit poistaa riippuvuuksia Cargo.toml-manifestista komentoriviltä.
- Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
- proc_macro::Span::lähdeteksti
- u*::{tarkistettu_lisäys_merkitty, ylivuoto_lisäys_merkitty, saturoiva_lisäys_merkitty, käärivä_lisäys_merkitty}
- i*::{tarkistettu_lisäys_unsigned, ylivuoto_lisäys_unsigned, saturaatio_lisäys_unsigned, käärivä_lisäys_unsigned}
- i*::{tarkistettu_sub_unsigned, ylivuoto_sub_unsigned, saturaatio_sub_unsigned, käärivä_sub_unsigned}
- BTreeSet::{ensimmäinen, viimeinen, pop_ensimmäinen, pop_viimeinen}
- BTreeMap::{ensimmäisen_avaimen_arvo, viimeisen_avaimen_arvo, ensimmäinen_aloitus, viimeinen_aloitus, ensimmäinen_pop, viimeinen_pop}
- Lisää AsFd-toteutukset stdio-lukitustyypeille WASI-protokollaa käytettäessä.
- impl KokeileFrom-palvelua > laatikolle<[T; N]>
- ydin::vihje::musta_laatikko
- Kesto::try_from_seconds_{f32,f64}
- Vaihtoehto::pura
- std::os::fd
- Alueet "..X" ja "..=X" ovat sallittuja malleissa.
- Rustc-kääntäjän käyttöliittymää ja LLVM-taustajärjestelmää rakennettaessa käytetään LTO (Link Time Optimization) ja BOLT (Binary Optimization and Layout Tool) -optimointitiloja, jotka mahdollistavat tuloksena olevan koodin suorituskyvyn parantamisen ja muistin kulutuksen vähentämisen.
- Armv5te-none-eabi- ja thumbv5te-none-eabi-alustoille on toteutettu tason 3 tuki. Taso 3 tarjoaa perustuen, mutta ilman automaattista testausta, virallisia koontiversioita tai koontiversioiden tarkistusta.
- Lisätty tuki linkittämiselle yleiskirjastoihin macOS.
Lisäksi Rust-kääntäjän käyttöliittymä (gccrs) on nyt sisällytetty GCC-koodikantaan. Käyttöliittymä sisältyy GCC 13 -haaraan, joka julkaistaan toukokuussa 2023. GCC 13:sta alkaen GCC:n vakiotyökaluketjua voidaan käyttää Rust-ohjelmien kääntämiseen ilman rustc-kääntäjän asentamista, joka on rakennettu LLVM-kehitystyön avulla. Rust-toteutus GCC 13:ssa on beta-versio, eikä sitä oletusarvoisesti sisällytetä.
Lähde: opennet.ru
