Rust 1.34 ohjelmointikielen julkaisu

Mozilla-projektin kehittämä järjestelmäohjelmointikieli Rust 1.34 on julkaistu. Kieli keskittyy muistin turvallisuuteen, tarjoaa automaattisen muistinhallinnan ja tarjoaa keinon saavuttaa korkea tehtävien rinnakkaisuus ilman roskankerääjää tai ajonaikaa.

Rustin automaattinen muistinhallinta vapauttaa kehittäjän osoittimien manipuloinnista ja suojaa matalan tason muistin käsittelystä johtuvilta ongelmilta, kuten jälkivapailta muistin hauilta, nollaosoittimen viittauksilta, puskurin ylityksiltä ja vastaavilta. Kirjastojen jakamiseen, kokoonpanon varmistamiseen ja riippuvuuksien hallintaan projektissa kehitetään Cargo-pakettienhallintaa, jonka avulla saat ohjelmaan tarvittavat kirjastot yhdellä napsautuksella. Crates.io-arkisto on tuettu kirjastojen isännöintiin.

Tärkeimmät innovaatiot:

  • Cargo-pakettien hallinta on lisännyt työkaluja, jotka toimivat vaihtoehtoisten pakettirekisterien kanssa, jotka voivat toimia samanaikaisesti julkisen crates.io-rekisterin kanssa. Esimerkiksi omien sovellusten kehittäjät voivat nyt käyttää omaa yksityistä rekisteriään, jota voidaan käyttää riippuvuuksien listaamiseen Cargo.tomlissa, ja soveltaa tuotteisiinsa crates.io:n kaltaista versiomallia sekä viitata riippuvuuksiin molempiin laatikoihin. io ja omaan rekisteriin.

    Ulkoisen rekisterin lisääminen tiedostoon ~/.cargo/config
    "[rekisterit]"-osiossa on uusi vaihtoehto "my-registry", ja "other-crate" -vaihtoehto on lisätty mainitsemaan ulkoinen rekisteri Cargo.toml-tiedoston riippuvuuksissa "[riippuvuudet]"-osiossa. Voit muodostaa yhteyden lisärekisteriin asettamalla todennustunnisteen ~/.cargo/credentials-tiedostoon ja suorittamalla komennon
    "cargo login --registry=my-registry" ja julkaista paketti -
    "rahdin julkaiseminen -rekisteri=oma-rekisteri";

  • Lisätty täysi tuki "?"-operaattorin käytölle. doctestsissä, joiden avulla voit käyttää dokumentaatiossa olevaa esimerkkikoodia testeinä. Aikaisemmin operaattori
    "?" voidaan käyttää virheiden käsittelemiseen testin suorittamisen aikana vain "fn main()"-funktion tai "#[test]"-funktioiden läsnä ollessa;

  • Proseduurimakrojen avulla määritetyissä mukautetuissa attribuuteissa on mahdollista käyttää mielivaltaisia ​​merkkijoukkoja ("#[attr($tokens)]", "#[attr[$tokens]] ja #[attr{$tokens}]" . Aiemmin elementit voitiin määrittää vain puu-/rekursiivisessa muodossa käyttämällä merkkijonoliteraaaleja, esimerkiksi "#[foo(bar, baz(quux, foo = "bar")]", mutta nyt on mahdollista käyttää luetteloita (' #[alue(0. .10)]') ja rakenteet, kuten "#[bound(T: MyTrait)]";
  • TryFrom- ja TryInto-ominaisuudet on vakautettu, mikä mahdollistaa tyyppimuunnokset virheenkäsittelyllä. Esimerkiksi menetelmät, kuten from_be_bytes, joissa on kokonaislukutyyppejä, käyttävät taulukoita syötteenä, mutta tiedot tulevat usein Slice-tyyppisinä, ja muuntaminen taulukoiden ja viipaleiden välillä on ongelmallista tehdä manuaalisesti. Uusien ominaisuuksien avulla määritetty toiminto voidaan suorittaa lennossa kutsumalla .try_into(), esimerkiksi "let num = u32::from_be_bytes(slice.try_into()?)". Aina onnistuneille muunnoksille (esimerkiksi tyypistä u8 u32:ksi) on lisätty virhetyyppi erehtymätön, jotta
    TryFrom kaikille olemassa oleville "From"-toteutuksille;

  • Käytöstä poistettu CommandExt::before_exec-funktio, joka mahdollisti käsittelijän suorittamisen ennen exec:tä, joka suoritettiin fork()-kutsun jälkeen haarautuneen aliprosessin yhteydessä. Tällaisissa olosuhteissa jotkin pääprosessin resurssit, kuten tiedostokuvaajat ja yhdistetyt muistialueet, voivat monistua, mikä voi johtaa määrittelemättömään toimintaan ja kirjastojen virheelliseen toimintaan.
    Ennen_exec:n sijaan on suositeltavaa käyttää vaarallista funktiota CommandExt::pre_exec.

  • Stabiloidut etumerkityt ja etumerkitttömät atomikokonaislukutyypit, joiden koko vaihtelee 8-64 bitin välillä (esim. AtomicU8), sekä etumerkilliset tyypit NonZeroI[8|16|32|54|128].
  • Sovellusliittymän uusi osa on siirretty vakaaseen luokkaan, mukaan lukien Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ]- ja SystemTime-metodit ovat vakiintuneet ::checked_[add|sub]. Funktiot iter::from_fn ja iter::seuraajät ovat vakiintuneet;
  • Kaikille kokonaislukutyypeille checked_pow-, saturating_pow-, wrapping_pow- ja overflowing_pow-menetelmät on toteutettu;
  • Lisätty mahdollisuus ottaa käyttöön optimoinnit linkitysvaiheessa määrittämällä "-C linker-plugin-lto" -koontivaihtoehto (rustc kokoaa Rust-koodin LLVM-bittikoodiksi, mikä mahdollistaa LTO-optimointien soveltamisen).

Lähde: opennet.ru

Lisää kommentti