Rust 1.39 programmeerimiskeele väljalase

avaldatud süsteemi programmeerimiskeele väljalase Rooste 1.39, mille asutas Mozilla projekt. Keel keskendub mälu ohutusele, pakub automaatset mäluhaldust ja vahendit ülesannete suure paralleelsuse saavutamiseks ilma prügikogujat või käitusaega kasutamata.

Rusti automaatne mäluhaldus säästab arendajat osutitega manipuleerimisest ja kaitseb madala tasemega mäluga manipuleerimisest tulenevate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, komplekteerimise tagamiseks ja sõltuvuste haldamiseks töötab projekt välja paketihalduri last, mis võimaldab hankida programmi jaoks vajalikud teegid ühe klõpsuga. Hoidlat toetatakse teekide hostimiseks crates.io.

Kõik uuendused:

  • Stabiliseeritud uus asünkroonne programmeerimise süntaks, mis põhineb funktsioonil "asünkroon", asünkroonse käigu { ... } plokil ja operaatoril ".await", mis teeb lihtsamaks selliste töötlejate kirjutamise, mis ei blokeeri peamist käsuvoogu. Võrreldes varem asünkroonse sisendi/väljundi jaoks pakutava API-ga, on async/.await konstruktsioonid lihtsalt arusaadavad, hästi loetavad ja võimaldavad rakendada keerulisi asünkroonseid interaktsioone, kasutades tuttavaid voo juhtimise tehnikaid, mis põhinevad silmustel, tingimuslausetel ja eranditel.

    Async-await süntaks võimaldab teil luua funktsioone, mis võivad nende täitmise peatada, tagastada juhtlõime põhilõimele ja jätkata täitmist sealt, kus need pooleli jäid. Näiteks on selline paus vajalik I/O töötlemisel, mille käigus saab teha muud tööd, oodates järgmise andmetüki saabumist. Funktsioonid ja plokid, mis on määratletud funktsioonidega "async fn" ja "async move", tagastavad tunnuse Tulevik, mis määratleb edasilükatud asünkroonse arvutuse esituse. Saate otse algatada edasilükatud arvutuse ja saada tulemuse operaatori „.await” abil. Enne .await kutsumist ei tehta ega planeerita ühtegi toimingut, mis võimaldab luua keerulisi pesastatud konstruktsioone ilma lisakuludeta.

    async fn esimene_funktsioon() -> u32 { .. }
    ...
    las tulevik = esimene_funktsioon();
    ...
    las tulemus: u32 = tulevik.oota;

  • Stabiliseeritud "#![feature(bind_by_move_pattern_guards)]", mis võimaldab kasutada muutujaid sidumistüübiga "käiguga" mallides ja kasutage viiteid nendele muutujatele avaldise "kui" jaotisesvastama". Näiteks on nüüd lubatud järgmised konstruktsioonid:

    fn main() {
    let massiiv: Kast<[u8; 4]> = Kast::uus([1, 2, 3, 4]);

    sobita massiivi {
    numbrid
    kui numbrid.iter().sum::() == 10

    => {
    tilk(numbrid);
    }
    _ => kättesaamatu!(),
    }
    }

  • Näidus lubatud atribuudid funktsiooni parameetrite, sulgemiste ja funktsiooniosutajate määratlemisel. Toetatud on tingimuslikud kompileerimisatribuudid (cfg, cfg_attr), mis kontrollivad diagnostikat linti kaudu (lubamine, hoiatus, keelamine ja keelamine) ja abimakrokutsingu atribuute.

    fn len(
    #[cfg(windows)] slice: &[u16], // kasutage parameetrit Windowsis
    #[cfg(not(windows))] slice: &[u8], // kasuta teistes operatsioonisüsteemides
    ) -> kasuta {
    slice.len()
    }

  • Hoiatused probleemide kohta, mis tuvastati muutujate laenamise kontrollimisel (laenamise kontrollija), kasutades NLL-tehnikat (Non-Lexical Lifetimes), tõlgitud saatuslike vigade kategooriasse. Meenutagem, et laenatud muutujate eluea arvestamise uuel mehhanismil põhinev kontrollisüsteem võimaldas tuvastada mõningaid probleeme, mis jäid vanale kontrollkoodile märkamatuks. Kuna selliste kontrollide veaväljund võib mõjutada ühilduvust varem töötava koodiga, anti vigade asemel algselt hoiatused. Hoiatused on nüüd Rust 2018 režiimis töötamise vigadega asendatud. Järgmises versioonis rakendatakse veaväljundit ka Rust 2015 režiimis, mis lõpuks vabaneb vanast laenukontrollist;
  • Funktsioonide Vec::new, String::new, LinkedList::new, str::len, [T]::len jaoks kasutatakse atribuuti “const”, mis määrab võimaluse kasutada konstantide asemel mis tahes kontekstis. , str::as_bytes,
    abs, wrapping_abs ja overflowing_abs;

  • Uus osa API-sid on üle viidud stabiilsesse kategooriasse, sealhulgas meetodid, mis on stabiliseeritud
    Pin::inner_inner, Instant::checked_duration_scene ja Instant::saturating_duration_sce;

  • Kaubapaketihalduril on nüüd võimalus kasutada konfiguratsioonifailide jaoks laiendit “.toml”. Lisatud esialgne tugi standardteegi ehitamiseks otse Cargost. Lisati lipp "--workspace", asendades vastuolulise lipu "--all". Metaandmetele on lisatud uus väli "avaldama", mis võimaldab avaldada sõltuvusi, määrates git-sildi ja versiooninumbri. Lisatud testvalik "-Ztimings", et luua HTML-aruanne erinevate kompileerimisetappide täitmisaegade kohta.
  • Rustc-kompilaatoris hõlmavad diagnostikateated terminali mittemahtuva koodi sabade kärpimist. Pakutakse sihtplatvormidele kolmandat taset
    i686-unknown-uefi ja sparc64-unknown-openbsd. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimise ja ametlike ehituste avaldamiseta.

Allikas: opennet.ru

Lisa kommentaar