Rust 1.36 ohjelmointikielen julkaisu

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

  • Ominaisuus vakiintunut Tulevaisuus, joka edustaa arvoa, jonka arviointia ei ehkä ole vielä suoritettu loppuun async / .await-lohkoja käytettäessä. Futurella määritetyt asynkroniset arvot mahdollistavat hyödyllisen työn suorittamisen säikeessä odottaen samanaikaisesti tietyn arvon laskelmien valmistumista;
  • Kirjasto vakiintunut allok, joka tarjoaa älykkäitä osoittimia ja kokoelmia muistin varattujen arvojen hallintaan. Muistin varaus standardissa käyttää nyt tyyppiä vec, jotka viedään uudelleen alloc. Allocin erillinen käyttö on järkevää sovelluksissa, joita ei ole sidottu std:hen ("#![no_std]"), sekä kirjastoissa, jotka on suunniteltu käytettäväksi vastaavissa ohjelmissa ilman std:tä;
  • Ohita arvojen oikean alustuksen tarkistukset ehdotettu keskitason tyyppi Ehkä yksikkö, jota voidaan käyttää mem::uniniitialized-toiminnon sijasta turvallisempana vaihtoehtona. Mem::uninitialized-funktio on kätevä taulukkojen nopeaan luomiseen, mutta se johtaa kääntäjää harhaan, koska se näyttää alustuneen, mutta todellisuudessa arvo pysyy alustamattomana. MaybeUninit antaa sinun ilmoittaa kääntäjälle nimenomaisesti, että arvo on alustamaton, ottaa huomioon tähän liittyvän mahdollisen määrittelemättömän toiminnan ja myös järjestää ohjelmien tarkistuksia "maybe_t:" ja vaiheittaisen alustuksen avulla, mikä merkitsee sen valmistumista. käyttämällä ".assume_init()" -kutsua. MaybeUninitin myötä mem::uninitialized-toiminto on vanhentunut, eikä sitä suositella käytettäväksi.
  • NLL (Non-Lexical Lifetimes) -tekniikka, joka laajensi järjestelmää lainattujen muuttujien eliniän kirjaamiseen, on vakiintunut Rust 2015 -kielelle (alun perin NLL:ää tuki vain Rust 2018). Sen sijaan, että NLL sitoisi eliniät leksikaalisella tasolla, se tekee sen suorituksen vuokaavion osoittimien joukon tasolla. Tämän lähestymistavan avulla voit parantaa muuttujien lainaamisen tarkistuksen laatua (lainaustarkistus) ja mahdollistaa tietyntyyppisten oikean koodin suorittamisen, jonka käyttö johti aiemmin virheeseen. Uusi toimintatapa tekee myös virheenkorjauksesta paljon helpompaa;
  • Mukana uusi assosiatiivisten taulukoiden toteutus HashMaprakenteen sovelluksen perusteella Sveitsin pöytä (latautuu automaattisesti hashruskea::HashMap, ellei nimenomaisesti toisin mainita, kuten std::HashMap, joka perustuu SipHash 1-3). Ohjelmiston käyttöliittymä pysyy samana, ja kehittäjän havaitsemat erot johtuvat lisääntyneestä suorituskyvystä ja pienentyneestä muistinkulutuksesta;
  • Paketinhallinnan lastissa lisätty "--offline" -vaihtoehto, joka mahdollistaa toiminnan ilman verkkoon pääsyä, jossa riippuvuuksia asennettaessa käytetään vain paikallisen järjestelmän välimuistissa olevia paketteja. Jos riippuvuus ei ole paikallisessa välimuistissa, annetaan virheilmoitus. Voit esiladata riippuvuuksia paikalliseen välimuistiin ennen offline-tilaan siirtymistä käyttämällä "cargo fetch" -komentoa.
  • Otettu käyttöön kyky kutsua makroa "dbg!" esittää useita argumentteja;
  • Metodeissa käytetään attribuuttia "const", joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan
    Asettelu::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::roikkuvat ja
    NonNull::cast;

  • Uusi osa API:ista on siirretty vakaaseen luokkaan, mukaan lukien stabiloidut menetelmät
    tehtävä::heräjä, tehtävä::kysely,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Lue::read_vectored, Kirjoita::write_vectored,
    Iteraattori::kopioitu,
    BorrowMut (merkkijonoille) ja str::as_mut_ptr.

Lähde: opennet.ru

Lisää kommentti