Rust 1.63 ohjelmointikielen julkaisu

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

  • Lisätty std::thread::scope API, jonka avulla voit luoda suojattuja säikeitä. Toisin kuin aiemmin saatavilla olevat säikeet, uusi std::thread::scope API sallii lainattavan ei-staattisen tiedon välittämisen, kun taas perinteisellä std::thread::spawn API:lla luotujen säikeiden edellytettiin omistavan kaikki välitetyt argumentit, eivätkä ne voineet vastaanottaa. lainattuja muuttujia. Std::thread::scope API varmistaa, että kaikki synnyttäneet säikeet lopetetaan ennen tietojen palauttamista, mikä tarjoaa riittävän suojan lainausmekanismille.
  • Uusia kääretyyppejä tiedostokuvauksille on ehdotettu - BorrowedFd ja OwnedFd, jotka tarjoavat lainaamisen ja omistajuuden. Tyypit on merkitty "#[repr(transparent)]", jolloin niitä voidaan käyttää suoraan ulkoisissa C-sidoksissa omistajuustietoisella tavalla.
  • Mahdollisuus kutsua Condvar::new, Mutex::new ja RwLock::new vakioiden yhteydessä globaalien staattisten Mutex-, RwLock- ja Condvar-arvojen luomiseksi käyttämättä lazy_static-paketteja.
  • Toimintoja, kuten fn foo (arvo: T, f: impl Kopioi) syntaksi, kuten "foo::" on sallittu (32, 3)", joka osoittaa nimenomaisesti geneerisen tyypin.
  • Siirtyminen NLL-tekniikkaan (Non-Lexical Lifetimes) muuttujien lainausongelmien tunnistamiseen on saatettu päätökseen. NLL ottaa huomioon suorituksen vuokaavion osoittimien joukon tasolla, jonka avulla voit parantaa lainausmuuttujien tarkistuksen laatua (lainaustarkistus) ja mahdollistaa tietyntyyppisten oikean koodin suorittamisen, jota käytetään johti aiemmin virheeseen. Tuki vanhalle mekanismille, joka käytti leksikaalista elinikäistä sidontaa, on nyt poistettu kokonaan rustc:sta ja uuden NLL:n käyttö on otettu käyttöön kauttaaltaan.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • array::from_fn
    • Box::into_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Polku::try_exists
    • Ref::filter_map
    • RefMut::filter_map
    • NonNull::<[T]>::len
    • Oomistettu::clone_into
    • Ipv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::LainattuFd<'fd>
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::LainattuKahva

      Lähde: opennet.ru

Lisää kommentti