Rust 1.61 ohjelmointikielen julkaisu

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

  • On mahdollista määrittää omat palautuskoodit päätoiminnosta. Alun perin Rustin pääfunktio saattoi palauttaa vain tyypin "()" (yksikkö), joka osoitti aina onnistuneen poistumistilan, ellei kehittäjä nimenomaisesti kutsunut "prosessi::exit(code)"-funktiota. Rust 1.26:ssa, käyttämällä päätoiminnon epävakaa lopetusominaisuutta, oli mahdollista palauttaa arvot "Ok" ja "Err", jotka vastaavat C-ohjelmien EXIT_SUCCESS- ja EXIT_FAILURE-koodeja. Rust 1.61:ssä Termination-ominaisuus on tehty vakaaksi, ja erillistä ExitCode-tyyppiä on ehdotettu edustamaan tiettyä palautuskoodia, joka abstraktioi alustakohtaiset palautustyypit antamalla sekä ennalta määritetyt vakiot SUCCESS ja FAILURE sekä From-menetelmän. palauttaaksesi mukautetun palautuskoodin. käytä std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::SUCCESS }
  • Ilmaisulla ”const fn” määriteltyjen funktioiden lisäominaisuudet on vakautettu, joita voidaan kutsua paitsi säännöllisiksi funktioiksi, myös käyttää missä tahansa kontekstissa vakioiden sijaan. Nämä funktiot lasketaan käännösaikana, ei ajon aikana, joten niitä koskevat tietyt rajoitukset, kuten kyky lukea vain vakioista. Uudessa versiossa perustoiminnot funktioosoittimilla ovat sallittuja const-funktioiden sisällä (osoittimien luominen, välittäminen ja heittäminen on sallittua, mutta ei funktion kutsumista osoittimella); ominaisuusrajat const-funktioiden yleisille parametreille, kuten T: Kopioi; dynaamisesti lähetettävät ominaisuudet (dyn ominaisuus); impl Ominaisuustyypit funktion argumenteille ja palautusarvoille.
  • Virta käsittelee Stdin, Stdout ja Stderr std::io-muodossa, ja niillä on nyt staattinen käyttöikä ("staattinen"), kun se on lukittu, mikä mahdollistaa muun muassa "let out = std::io::stdout().lock();" saamalla kahvan ja asettamalla lukon yhdellä lauseella.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • Pin::static_mut
    • Pin::static_ref
    • Vanh::retain_mut
    • VecDeque::retain_mut
    • Kirjoita kohdistimelle<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::prosessi::ExitCode
    • std::prosessi::Päättäminen
    • std::thread::JoinHandle::on_finished
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa:
    • <*const T>::offset ja <*mut T>::offset
    • <*const T>::wrapping_offset ja <*mut T>::wrapping_offset
    • <*const T>::add ja <*mut T>::add
    • <*const T>::sub ja <*mut T>::sub
    • <*const T>::wrapping_add ja <*mut T>::wrapping_add
    • <*const T>::wrapping_sub ja <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Lisäksi voit huomioida artikkelin "Rust: A Critical Retrospective", jossa on yhteenveto Rust-kielen vaikutelmista sen jälkeen, kun siihen on kirjoitettu 100 tuhatta koodiriviä laiteohjelmistossa käytetyn Xous-mikroytimen käyttöjärjestelmän kehittämisen aikana. Haittoja ovat vaikeasti ymmärrettävä syntaksi, epätäydellisyys ja kielen jatkuva kehitys, toistettavien koontiversioiden puute, tyypilliset Crates.io-riippuvuusluottamusongelmat ja tarve ylläpitää tiettyä kurinalaisuutta suojatun koodin kirjoittamisessa. Odotukset ylittäviin ominaisuuksiin kuuluvat työkalut koodin uudelleenmuodostukseen ja nopean prototyyppien aikana lisättyjen "hakkerointien" uudelleenkäsittelyyn.

Lähde: opennet.ru

Lisää kommentti