Rust 1.38 programavimo kalbos leidimas

paskelbta sistemos programavimo kalbos leidimas Rūdys 1.38, į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:

  • Pridėtas konvejerinis kompiliavimo režimas (sujungtas), kuriame priklausomo dėžės paketo kūrimas pradedamas iškart, kai tik tampa prieinami priklausomybės metaduomenys, nelaukiant, kol bus baigtas kompiliavimas. Sudarant paketą, priklausomybių nereikia visiškai surinkti, užtenka apibrėžti metaduomenis, kurie apima tipų, priklausomybių ir eksportuojamų elementų sąrašus. Metaduomenys pateikiami kompiliavimo proceso pradžioje, todėl susietus paketus dabar galima kompiliuoti daug anksčiau. Kuriant pavienius paketus, siūlomas režimas neturi įtakos našumui, tačiau jei kūrimas apima paketus su šakotomis priklausomybėmis, bendras kūrimo laikas gali sutrumpėti 10-20%;
  • Užtikrina netinkamo funkcijų naudojimo aptikimą std::mem::neinicializuotas и std::mem::nulis. Pavyzdžiui, std::mem::unitialized patogu greitai sukurti masyvus, tačiau jis klaidina kompiliatorių, nes atrodo, kad jis inicijuotas, tačiau iš tikrųjų reikšmė lieka nepainicijuota. Funkcija mem::uninitialized jau pažymėta kaip nebenaudojama, todėl rekomenduojama vietoj jos naudoti tarpinį tipą GalbūtVieta. Kalbant apie mem::zeroed, ši funkcija gali sukelti problemų dėl tipų, kurie negali priimti nulių reikšmių.

    Kad būtų lengviau nustatyti neapibrėžtą elgesį, nauja versija prideda kompiliatorių, kuris aptinka kai kurias problemas, susijusias su mem::unitialized arba mem::zeroed. Pavyzdžiui, dabar gaunate klaidą, kai bandote naudoti mem::unitialized arba mem::zeroed su tipais &T ir Box‹T›, kurie žymi rodyklės objektus, kurie negali priimti nulinių reikšmių;

  • Atributas „#[nebenaudojamas]“ buvo išplėstas, kad būtų galima pažymėti dėžių paketus kaip pasenusius ir suplanuoti jų ištrynimą ateityje. Nuo Rust 1.38 šis atributas taip pat gali būti naudojamas makrokomandoms;
  • Pridėta galimybė submoduliuose naudoti atributą „#[global_allocator]“;
  • Pridėta funkcija std::bet koks::tipo_pavadinimas, kuri leidžia sužinoti tipo pavadinimą, kuris gali būti naudingas derinant. Pavyzdžiui, programos vykdymo metu galite sužinoti, kokiam tipui funkcija buvo pavadinta:

    fn gen_value‹T: Default>() -› T {
    println!("Inicijuoja {} egzempliorius", std::any::tipo_pavadinimas::‹T›());
    Numatytasis::default()
    }

    fn main() {
    tegul _: i32 = gen_value(); Bus išspausdintas # "i32".
    tegul _: String = gen_value(); # išspausdins "alloc::string::String"
    }

  • Išplėstinės standartinės bibliotekos funkcijos:
    • slice::{concat, connect, join} dabar gali turėti reikšmę &[T], be &T;
    • „*const T“ ir „*mut T“ dabar įgyvendina žymeklį::Atsegti;
    • "Arc‹[T]›" ir "Rc‹[T]›" dabar įgyvendina FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} dabar įdiegia DoubleEndedIterator.
    • ascii::EscapeDefault įgyvendina Clone and Display.
  • Nauja API dalis buvo perkelta į stabilią kategoriją, įskaitant metodus, kurie buvo stabilizuoti
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Trukmė::as_secs_f{32|64},
    • Trukmė::div_duration_f{32|64},
    • Trukmė::div_f{32|64},
    • Trukmė::from_secs_f{32|64},
    • Trukmė::mul_f{32|64},
    • padalijimo operacijos su likusia dalimi
      div_euclid ir rem_euclid visiems sveikųjų skaičių primityvams;

  • Pridėtas palaikymas kelis kartus nurodant parinktį „--features“, kad krovinių paketų tvarkyklėje būtų įjungtos skirtingos funkcijos;
  • Kompiliatorius pateikia trečią lygis palaikymas tikslinėms platformoms aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets-,-mlinuxv7 -gnueabi, armv7-unknown-linux-musleabi, šešiakampis-unknown-linux-musl ir riscv32i-unknown-none-elf. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo ir oficialių versijų paskelbimo.

Šaltinis: opennet.ru

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