Rust 1.39 ohjelmointikielen julkaisu

julkaistu järjestelmän ohjelmointikielen julkaisu Ruoste 1.39, jonka perusti 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:

  • Vakautettu uusi asynkroninen ohjelmointisyntaksi, joka perustuu "async"-funktioon, async move { ... } -lohkoon ja ".await"-operaattoriin, mikä helpottaa käsittelijöiden kirjoittamista, jotka eivät estä pääkomentokulkua. Verrattuna aiemmin tarjottuun asynkronisen I/O:n sovellusliittymään, async/.await-rakenteet ovat yksinkertaisia ​​ymmärtää, erittäin luettavia ja mahdollistavat monimutkaisten asynkronisten vuorovaikutusten toteuttamisen käyttämällä tuttuja silmukoihin, ehdollisiin lausekkeisiin ja poikkeuksiin perustuvia vuonohjaustekniikoita.

    Async-await-syntaksin avulla voit luoda toimintoja, jotka voivat keskeyttää suorituksensa, palauttaa ohjauksen pääsäikeeseen ja jatkaa sitten suoritusta siitä, mihin ne jäivät. Tällaista taukoa tarvitaan esimerkiksi I/O:n käsittelyssä, jolloin voidaan tehdä muuta työtä odottaessaan seuraavan datan saapumista. Funktiot ja lohkot, jotka on määritelty sanoilla "async fn" ja "async move" palauttavat ominaisuuden Tulevaisuus, joka määrittää viivästetyn asynkronisen laskentaesityksen. Voit suoraan aloittaa viivästetyn laskennan ja saada tuloksen käyttämällä ".await"-operaattoria. Toimia ei suoriteta tai suunnitella etukäteen ennen kuin .await on kutsuttu, jolloin monimutkaisia ​​sisäkkäisiä rakenteita voidaan luoda ilman lisäkustannuksia.

    async fn ensimmäinen_funktio() -> u32 { .. }
    ...
    anna tulevaisuuden = ensimmäinen_funktio();
    ...
    anna tulos: u32 = future.await;

  • Vakautettu "#![feature(bind_by_move_pattern_guards)]", sallii muuttujien käytön, joiden sidontatyyppi on "liikkeellä" malleissa ja käytä viittauksia näihin muuttujiin lausekkeen "jos" -osiossaottelu". Esimerkiksi seuraavat rakenteet ovat nyt sallittuja:

    fnmain() {
    let array: Box<[u8; 4]> = Laatikko::uusi([1, 2, 3, 4]);

    vastaa array {
    summat
    jos numerot.iter().sum::() == 10

    => {
    drop(numerot);
    }
    _ => tavoittamaton!(),
    }
    }

  • Indikaatio sallittu attribuutteja kun määritetään funktioparametreja, sulkuja ja toimintoosoittimia. Ehdolliset käännösattribuutit (cfg, cfg_attr), jotka ohjaavat diagnostiikkaa lintillä (allow, warn, deny ja forbid) ja apu makrokutsuattribuutteja ovat tuettuja.

    fn len(
    #[cfg(windows)] slice: &[u16], // käytä parametria Windowsissa
    #[cfg(not(windows))] slice: &[u8], // käytä muissa käyttöjärjestelmissä
    ) -> käytä {
    slice.len()
    }

  • Varoitukset ongelmista, jotka havaitaan tarkistettaessa muuttujien lainaamista (lainaustarkistus) NLL-tekniikalla (Non-Lexical Lifetimes), käännetty kohtalokkaiden virheiden kategoriaan. Muistetaan, että uuteen mekanismiin perustuvan lainattujen muuttujien elinkaaren huomioon ottamiseen perustuvan varmennusjärjestelmän avulla oli mahdollista tunnistaa joitain ongelmia, jotka jäivät vanhalta varmistuskoodilta huomaamatta. Koska tällaisten tarkistusten virhetulostus saattaa vaikuttaa yhteensopivuuteen aiemmin toimineen koodin kanssa, virheiden sijaan annettiin aluksi varoituksia. Varoitukset on nyt korvattu virheillä ruoste 2018 -tilassa. Seuraavassa julkaisussa virhetulostus toteutetaan myös Rust 2015 -moodissa, joka lopulta päästää eroon vanhasta lainatarkistuksesta;
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa Vec::new, String::new, LinkedList::new, str::len, [T]::len. , str::as_bytes,
    abs, wrapping_abs ja overflowing_abs;

  • Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut menetelmät
    Pin::inner_inner, Instant::checked_duration_sance ja Instant::saturating_duration_sce;

  • Rahtipakettien hallintaohjelmalla on nyt mahdollisuus käyttää .toml-laajennusta asetustiedostoille. Lisätty alustava tuki vakiokirjaston rakentamiseen suoraan Cargosta. Lisätty "--workspace"-lippu, joka korvaa kiistanalaisen "--all"-lipun. Metatietoihin on lisätty uusi kenttä "julkaista", jonka avulla voit julkaista riippuvuuksia määrittämällä git-tunnisteen ja versionumeron. Lisätty testivaihtoehto "-Ztimings" luomaan HTML-raportti eri käännösvaiheiden suoritusajoista.
  • Rustc-kääntäjässä diagnostiset viestit sisältävät päätteeseen mahdottoman koodin päiden leikkaamisen. Tarjottu kolmannen tason tuki kohdealustoille
    i686-unknown-uefi ja sparc64-unknown-openbsd. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta ja virallisten koontiversioiden julkaisemista.

Lähde: opennet.ru

Lisää kommentti