Rust 1.36 programavimo kalbos leidimas

paskelbta sistemos programavimo kalbos leidimas Rūdys 1.36, įkurta Mozilla projekto. Kalba skirta atminties saugai, suteikia automatinį atminties valdymą ir suteikia galimybę pasiekti aukštą užduočių lygiagretumą nenaudojant šiukšlių rinktuvo ar vykdymo laiko.

„Rust“ automatinis atminties valdymas išlaisvina kūrėją nuo manipuliavimo žymekliu ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., laisvos atminties prieigos, nulinių rodyklės nuorodų, buferio viršijimo ir panašiai. Kuriama paketų tvarkyklė, skirta platinti bibliotekas, užtikrinti surinkimą ir valdyti projekto priklausomybes. krovinys, leidžiančiu vienu paspaudimu gauti programai reikalingas bibliotekas. Saugykla palaikoma prieglobos bibliotekoms dėžės.io.

pagrindinis naujoves:

  • Požymis stabilizavosi Ateitis, kuri reiškia reikšmę, kurios vertinimas dar gali būti nebaigtas naudojant asinchroninius / .laukti blokus. Asinchroninės reikšmės, apibrėžtos naudojant „Future“, leidžia tęsti naudingą darbą gijoje, tuo pat metu laukiant, kol bus baigti tam tikros vertės skaičiavimai;
  • Biblioteka stabilizavosi skirti, kuriame pateikiamos išmaniosios rodyklės ir rinkiniai, skirti valdyti atminčiai priskirtas reikšmes. Atminties paskirstymas std dabar naudoja tipą Dalykas, kurios reeksportuojamos iš asign. Atskiras aloc naudojimas yra prasmingas programose, nesusietose su std („#![no_std]“), taip pat bibliotekose, skirtose naudoti panašiose programose be std;
  • Norėdami apeiti patikrinimus, ar tinkamai inicijuojamos reikšmės pasiūlė tarpinis tipas GalbūtVieta, kurią kaip saugesnę alternatyvą galima naudoti vietoj funkcijos mem::unitialized. Funkcija mem::unitialized yra patogi norint greitai sukurti masyvus, tačiau ji klaidina kompiliatorių, nes atrodo, kad jis buvo inicijuotas, tačiau iš tikrųjų reikšmė lieka neinicializuota. „MaybeUninit“ leidžia aiškiai nurodyti kompiliatoriui, kad reikšmė nepainicijuota, atsižvelgti į galimą neapibrėžtą su tuo susijusį elgesį, taip pat organizuoti programų patikrinimus naudojant „maybe_t:“ ir žingsnis po žingsnio inicijavimą, pažymint jos užbaigimą. naudojant „.assume_init()“ iškvietimą. Atsiradus MaybeUninit, funkcija mem::unitialized buvo pasenusi ir nerekomenduojama naudoti;
  • NLL (Non-Lexical Lifetimes) technika, išplėtusi pasiskolintų kintamųjų gyvavimo trukmės registravimo sistemą, buvo stabilizuota kalbai „Rust 2015“ (iš pradžių NLL palaikė tik „Rust 2018“). Užuot nustatęs gyvavimo trukmę leksiniu lygmeniu, NLL tai daro vykdymo srauto grafiko rodyklių rinkinio lygiu. Šis metodas leidžia pagerinti kintamųjų skolinimosi tikrinimo kokybę (paskolos tikrintuvas) ir leisti vykdyti kai kurių tipų teisingus kodus, kuriuos naudojant anksčiau įvyko klaida. Naujas elgesys taip pat labai palengvina derinimą;
  • Įtrauktas naujas asociatyvinių masyvų įgyvendinimas „HashMap“, remiantis struktūros pritaikymu Šveicarijos stalas (įkeliamas automatiškai Hashbrown::HashMap, nebent aiškiai nurodyta kitaip, pavyzdžiui, std::HashMap, kuris yra pagrįstas SipHash 1-3). Programinės įrangos sąsaja išlieka ta pati, o kūrėjo pastebimi skirtumai susiveda į didesnį našumą ir sumažintą atminties suvartojimą;
  • Pakuotės tvarkyklės krovinyje pridėta parinktis „--offline“, leidžianti veikti neprisijungus prie tinklo, kai diegiant priklausomybes naudojami tik vietinėje sistemoje talpykloje saugomi paketai. Jei priklausomybės nėra vietinėje talpykloje, bus rodoma klaida. Norėdami iš anksto įkelti priklausomybes į vietinę talpyklą prieš prisijungdami prie interneto, galite naudoti komandą „krovinio paėmimas“;
  • Įdiegta galimybė iškviesti makrokomandą „dbg! nurodant kelis argumentus;
  • Metodams naudojamas atributas „const“, kuris nustato galimybę naudoti bet kuriame kontekste vietoj konstantų
    Išdėstymas::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::kabantis ir
    NonNull::cast;

  • Nauja API dalis buvo perkelta į stabilią kategoriją, įskaitant metodus, kurie buvo stabilizuoti
    užduotis::Waker, užduotis::Apklausa,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Skaityti::read_vectored, Rašyti::write_vectored,
    Iteratorius::kopijuotas,
    BorrowMut (eilėms) ir str::as_mut_ptr.

Šaltinis: opennet.ru

Добавить комментарий