Rust 1.34 ohjelmointikielen julkaisu

tapahtui järjestelmän ohjelmointikielen julkaisu Ruoste 1.34, jonka on kehittänyt Mozilla-projekti. 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. Paketinhallintaa kehitetään kirjastojen jakamiseen, kokoamisen varmistamiseen ja riippuvuuksien hallintaan projektin toimesta. lasti, jonka avulla voit saada ohjelman tarvitsemat kirjastot yhdellä napsautuksella. Arkisto on tuettu isäntäkirjastoille laatikot.io.

Pääasiallinen innovaatioita:

  • 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.

    Ulkoisten rekisterien lisääminen tiedostoon .cargo/config (sijaitsee $HOMEssa tai pakettihakemistossa)
    tarjotaan osiossa "[rekisterit]" ja ulkoisen rekisterin käyttämiseksi "rekisteri"-vaihtoehto on ilmestynyt Cargo.toml:n kunkin riippuvuuden kuvaukseen. 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. testeissä tohtorit, jolloin voit käyttää esimerkkikoodia dokumentaatiosta testeinä. Aikaisemmin operaattori
    "?" voidaan käyttää virheiden käsittelemiseen testin suorittamisen aikana vain "fn main()"-funktion tai "#[test]"-funktioiden läsnä ollessa;

  • Mukautetuissa määritteissä, jotka on määritetty prosessimakrojen avulla turvattu mahdollisuus 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)]";
  • Stabiloidut tyypit (ominaisuus) TryFrom и Kokeile, 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önmahdollistaa läpinäkyvän käytön
    TryFrom kaikille olemassa oleville "From"-toteutuksille;

  • Toiminto on vanhentunut CommandExt::before_exec, joka mahdollisti käsittelijän suorittamisen ennen exec-komentoa, joka suoritettiin aliprosessin yhteydessä, joka on haaroittunut fork()-kutsun jälkeen. 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.
    On suositeltavaa käyttää vaarallista funktiota before_exec-funktion sijaan CommandExt::pre_exec.

  • Stabiloidut etumerkityt ja etumerkitttömät atomikokonaislukutyypit, joiden koko vaihtelee 8-64 bitin välillä (esim. AtomicU8), sekä signeeratut tyypit NonZeroI[8|16|32|64|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.

Lähde: opennet.ru

Lisää kommentti