Rust 1.65 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.65, 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:

  • GAT (Generic Associated Types) -tuki on lisätty, mikä mahdollistaa toiseen tyyppiin liittyvien tyyppialiaksien luomisen ja mahdollistaa tyyppikonstruktoreiden liittämisen ominaisuuksiin. ominaisuus Foo { tyyppi Bar<'x>; }
  • "Let … else" -lauseke on toteutettu, jonka avulla voit tarkistaa mallin täsmäytysehdon suoraan "let" -lausekkeen sisällä ja suorittaa mielivaltaisen koodin, jos kuvio ei täsmää. anna Ok(count) = u64::from_str(count_str) else { panic!("Ei voida jäsentää kokonaislukua: '{count_str}'"); };
  • On sallittua käyttää break-lausetta poistuaksesi nimetyistä lohkoista ennenaikaisesti, käyttämällä lohkon nimeä (etiketti) päättävän lohkon määrittämiseen. anna tulos = 'block: { do_thing(); if condition_not_met() { break 'lohko 1; } tee_seuraava_asia(); if condition_not_met() { break 'lohko 2; } tee_viimeinen_asia(); 3};
  • Linuxille lisätty mahdollisuus tallentaa virheenkorjaustiedot erikseen (split-debuginfo), joka oli aiemmin saatavilla vain macOS-alustalle. "-Csplit-debuginfo=unpacked"-vaihtoehdon määrittäminen tallentaa debuginfo-tiedot DWARF-muodossa useisiin erillisiin objektitiedostoihin, joiden tunniste on ".dwo". Määrittäminen "-Csplit-debuginfo=packed" luo yhden paketin ".dwp"-muodossa, joka sisältää kaikki projektin debuginfo-tiedot. Voit integroida debuginfo suoraan ELF-objektien .debug_*-osioon käyttämällä "-Csplit-debuginfo=off" -vaihtoehtoa.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • std::backtrace::backtrace
    • Sidottu::as_ref
    • std::io::lue_merkkijonoon
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa <*const T&>::offset_from ja <*mut T>::offset_from.
  • Osana viimeistä vaihetta LSP (Language Server Protocol) -protokollan toteutuksen siirtämisessä rust-analysaattoriin, Rust Language Serverin (RLS) vanhentunut toteutus on korvattu tynkäpalvelimella, joka antaa varoituksen, joka viittaa ruosteen käyttöön. -analysaattori.
  • Käännösvaiheessa on käytössä tuki MIR-välikoodin inline käyttöönotolle, mikä nopeuttaa tyypillisten laatikkopakettien kääntämistä 3-10%.
  • Nopeuttaakseen ajoitettuja koonnoksia Cargo-pakettien hallinta tarjoaa jonossa olevien töiden lajittelun.

Lisäksi voidaan mainita haastattelu Rust-kielen käytöstä Volvolla autojen tietojärjestelmien komponenttien kehittämisessä. Nykyistä ja testattua koodia ei ole tarkoitus kirjoittaa uudelleen Rustissa, mutta uudelle koodille Rust on yksi suosituimmista vaihtoehdoista laadun parantamiseksi pienemmillä kustannuksilla. Ruosteeseen liittyviä työryhmiä on perustettu myös autoalan yhdistyksissä AUTOSAR (AUTomotive Open System ARchitecture) ja SAE (Society of Automotive Engineers).

Lisäksi David Kleidermacher, Googlen suunnittelujohtaja, puhui Android-alustalla salausavainten hallintaan käytetyn koodin Rust-käännöksestä sekä Rustin käytöstä DNS-protokollan käyttöönotossa HTTPS-protokollan kautta. UWB-sirut (Ultra-Wideband) ja Tensor G2 -siruun liittyvässä virtualisointikehyksessä (Android Virtualization Framework). Androidille kehitetään myös uusia Bluetooth- ja Wi-Fi-pinoja, jotka on kirjoitettu uudelleen Rust-kielellä. Yleinen strategia on lisätä turvallisuutta asteittain siirtämällä epävarmimmat ja tärkeimmät ohjelmistokomponentit Rustiin ja laajentamalla sitten muihin niihin liittyviin alijärjestelmiin. Viime vuonna Rust sisällytettiin Android-alustan kehittämiseen sallittujen kielten luetteloon.

Lähde: opennet.ru

Lisää kommentti