Rust 1.36 programmeerimiskeele väljalase

avaldatud süsteemi programmeerimiskeele väljalase Rooste 1.36, 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:

  • Iseloom stabiliseerunud Tulevik, mis tähistab väärtust, mille hindamine ei pruugi asünkrooni / .await plokkide kasutamisel veel lõpule viia. Future abil määratletud asünkroonsed väärtused võimaldavad jätkata lõimes kasuliku töö tegemist, oodates samal ajal teatud väärtuse arvutuste lõpetamist;
  • Raamatukogu stabiliseerus eraldada, mis pakub nutikaid viiteid ja kogusid mälule eraldatud väärtuste haldamiseks. Mälu eraldamine std-s kasutab nüüd tüüpi Asi, mis reeksporditakse alloc. Alloc eraldi kasutamine on mõttekas rakendustes, mis pole std-ga seotud (“#![no_std]”), samuti teekides, mis on mõeldud kasutamiseks sarnastes programmides ilma std-ta;
  • Väärtuste õige initsialiseerimise kontrollimisest möödahiilimiseks pakutud vahepealne tüüp Võib-olla üksus, mida saab turvalisema alternatiivina kasutada funktsiooni mem::unitialized asemel. Funktsioon mem::uninitialized on mugav kiireks massiivide loomiseks, kuid see eksitab kompilaatorit, sest näib, et see on lähtestatud, kuid tegelikult jääb väärtus initsialiseerimata. MaybeUninit võimaldab teil selgesõnaliselt näidata kompilaatorile, et väärtus on initsialiseerimata, võtta arvesse sellega seotud võimalikku määratlemata käitumist ning korraldada programmide kontrolle läbi "maybe_t:" ja samm-sammult lähtestamise, mis tähistab selle valmimist kasutades väljakutset ".assume_init()". MaybeUniniti tulekuga on funktsioon mem::uniniitialized aegunud ja seda ei soovitata kasutada;
  • NLL (Non-Lexical Lifetimes) tehnika, mis laiendas laenatud muutujate eluea salvestamise süsteemi, on Rust 2015 keele jaoks stabiliseeritud (esialgu toetas NLL-i ainult Rust 2018). Selle asemel, et määrata eluiga leksikaalsel tasemel, teeb NLL seda täitmisvoo graafiku osutite komplekti tasemel. Selline lähenemine võimaldab tõsta muutujate laenamise kontrollimise kvaliteeti (laenamise kontrollija) ja lubada täita teatud tüüpi korrektseid koode, mille kasutamine varem põhjustas vea. Uus käitumine muudab ka silumise palju lihtsamaks;
  • Kaasatud on assotsiatiivsete massiivide uus rakendus HashMap, mis põhineb struktuuri rakendusel Šveitsi laud (laaditakse automaatselt hashbrown::HashMap, kui pole selgesõnaliselt öeldud teisiti, näiteks std::HashMap, mis põhineb SipHash 1-3). Tarkvaraliides jääb samaks ja arendaja jaoks märgatavad erinevused taanduvad jõudluse suurenemisele ja mälutarbimise vähenemisele;
  • Pakendihalduri lastis lisatud suvand "--offline", mis võimaldab töötada ilma võrku sisenemata, kus sõltuvuste installimisel kasutatakse ainult kohalikus süsteemis vahemällu salvestatud pakette. Kui sõltuvust pole kohalikus vahemälus, kuvatakse tõrge. Sõltuvuste eellaadimiseks kohalikku vahemällu enne võrguühenduseta minekut saate kasutada käsku „lasti toomine”;
  • Rakendatud on võimalus kutsuda makro "dbg!" mitmete argumentide välja toomine;
  • Meetodite puhul kasutatakse atribuuti “const”, mis määrab võimaluse kasutada konstantide asemel mis tahes kontekstis
    Paigutus::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::rippuvad ja
    NonNull::cast;

  • Uus osa API-sid on üle viidud stabiilsesse kategooriasse, sealhulgas meetodid, mis on stabiliseeritud
    ülesanne::ärataja, ülesanne::küsitlus,
    VecDeque::pööra_vasakule, VecDeque::pööra_paremale,
    Loe::read_vectored, Kirjuta::write_vectored,
    Iteraator::kopeeritud,
    BorrowMut (stringide jaoks) ja str::as_mut_ptr.

Allikas: opennet.ru

Lisa kommentaar