Rust 1.57 ohjelmointikielen julkaisu

Mozilla-projektin perustaman, mutta nyt itsenäisen voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa kehitetyn järjestelmäohjelmointikielen Rust 1.57 julkaisu on julkaistu. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa välineet korkean tehtävien rinnakkaisuuden saavuttamiseen ilman roskankerääjää tai ajonaikaa (ajoaika on rajoittunut vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin automaattinen muistinhallinta eliminoi virheet osoittimia käsiteltäessä ja suojaa matalan tason muistin käsittelystä aiheutuvilta ongelmilta, kuten muistialueen käyttämiseltä sen vapauttamisen jälkeen, nollaosoittimen viittauksilta, puskurin ylityksiltä jne. Kirjastojen jakeluun, kokoonpanon varmistamiseen ja riippuvuuksien hallintaan projektissa kehitetään Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

Tärkeimmät innovaatiot:

  • ”Panic!”-makron käyttö on vakiintunut. kääntämisen aikana luoduissa yhteyksissä, kuten "const fn" -ilmoitukset. Lisäksi "paniikki!" const-ilmoitukset sallivat "assert!"-makron käytön. ja joitain muita vakiokirjastojen sovellusliittymiä. Stabilointi ei vielä kata koko muotoiluinfrastruktuuria, joten nykyisessä muodossaan "paniikki!"-makro voidaan käyttää vain staattisten merkkijonojen (panic!(“...")) kanssa tai yhdellä interpoloidulla arvolla "&str" korvattaessa (paniikki!("{}", a)), joka tulisi rajoittaa "{" }" ilman muotoilumääritteitä ja muita tyyppejä. Jatkossa makrojen sovellettavuutta vakiokonteksteissa laajennetaan, mutta vakiintuneet ominaisuudet riittävät jo käännösvaiheessa suorittamaan vahvistustarkistuksia: const _: () = assert!(std::mem::size_of::() == 64 ); const _: () = assert!(std::mem::size_of::() == 8);
  • Cargo-pakettien hallinta mahdollistaa mielivaltaisten nimien profiilien käytön, ei rajoitu "dev", "release", "test" ja "bench". Jos esimerkiksi haluat ottaa optimoinnin käyttöön linkitysvaiheessa (LTO) vain, kun lopulliset tuotekokoonpanot on luotu, voit luoda "tuotanto" -profiilin Cargo.tomlissa ja lisätä siihen lipun "lto = true". Omia profiileja määriteltäessä sinun on kuitenkin määritettävä olemassa oleva profiili, jotta voit periä siitä oletusasetukset. Alla oleva esimerkki luo "tuotanto"-profiilin, joka täydentää "release"-profiilia lisäämällä "lto = true" -lipun. Itse profiili aktivoidaan kutsumalla lasti "--profile production" -vaihtoehdolla, ja kokoonpanoartefaktit sijoitetaan "target/production"-hakemistoon. [profiili.tuotanto] inherits = "vapauta" lto = tosi
  • Try_reserve-parametrin käyttö Vec-, String-, HashMap-, HashSet- ja VecDeque-tyypeille on vakiintunut, jolloin voit varata tilaa etukäteen tietylle määrälle tietyn tyyppisiä elementtejä muistin varaustoimintojen vähentämiseksi ja välttämiseksi. kaatuu käytön aikana muistin puutteen vuoksi.
  • On sallittua määrittää makroja aaltosulkeilla lausekkeissa, kuten "m!{ .. }.method()" ja "m!{ .. }?".
  • Funktioiden File::read_to_end ja read_to_string suoritus on optimoitu.
  • Unicode-määrityksen tuki on päivitetty versioon 14.0.
  • Laajensi #[must_use] -merkittyjen funktioiden määrää antamaan varoituksen, jos palautusarvo jätetään huomioimatta. Tämä auttaa tunnistamaan virheet, jotka johtuvat siitä, että funktio muuttaa arvoja uuden arvon sijaan.
  • Lisätty kokeellinen taustaohjelma koodin luomiseen libgccjitin avulla.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kokoelmat::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Merkkijono::try_reserve
    • Merkkijono::try_reserve_exact
    • Vanha::try_reserve
    • Vanha::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iteraattori::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Komento::get_program
    • Komento::get_args
    • Komento::get_envs
    • Komento::get_current_dir
    • CommandArgs
    • CommandEnvs
  • "const"-attribuuttia, joka määrittää, voidaanko sitä käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktiossa hint::unreachable_unchecked.
  • Kolmas tukitaso on otettu käyttöön malleille armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ja armv7a solid_asp3-eabihf alustat. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.

Lähde: opennet.ru

Lisää kommentti