Rust 1.38 programmeerimiskeele väljalase

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

  • Lisatud konveierkompileerimisrežiim (konveier), milles sõltuva kastipaketi ehitamine algab kohe, kui sõltuvuse metaandmed muutuvad kättesaadavaks, ootamata selle kompileerimise lõpetamist. Paketi koostamisel ei pea sõltuvusi täielikult kokku panema, piisab metaandmete määratlemisest, mis sisaldab tüüpide, sõltuvuste ja eksporditud elementide loendeid. Metaandmed tehakse kättesaadavaks juba kompileerimisprotsessi alguses, nii et lingitud pakette saab nüüd koostada palju varem. Üksikpakettide ehitamisel pakutav režiim jõudlust ei mõjuta, kuid kui ehitamine hõlmab hargnenud sõltuvustega pakette, saab kogu koostamisaega lühendada 10-20% võrra;
  • Tagab funktsioonide ebaõige kasutamise tuvastamise std::mem::initsialiseeritud и std::mem::nullitud. Näiteks std::mem::uninitialized on mugav kiireks massiivide loomiseks, kuid see eksitab kompilaatorit, kuna see näib olevat lähtestatud, kuid tegelikult jääb väärtus initsialiseerimata. Funktsioon mem::uninitialized on juba märgitud aegunuks ja selle asemel on soovitatav kasutada vahepealset tüüpi Võib-olla üksus. Mis puutub mem::zeroed-i, siis see funktsioon võib põhjustada probleeme tüüpidega, mis ei aktsepteeri nullväärtusi.

    Määratlemata käitumise tuvastamiseks lisab uus versioon kompilaatorisse ebemekontrolli, mis tuvastab mõned probleemid mem::uninitialized või mem::zeroed. Näiteks kuvatakse nüüd tõrketeade, kui proovite kasutada mem::uninitialized või mem::zeroed tüüpidega &T ja Box‹T›, mis esindavad osutiobjekte, mis ei aktsepteeri nullväärtusi;

  • Atribuuti „#[aegunud]” on laiendatud, et võimaldada kastipakettide märkimist aegunuks ja ajastatud edaspidiseks kustutamiseks. Alates versioonist Rust 1.38 saab seda atribuuti kasutada ka makrode jaoks;
  • Lisatud võimalus kasutada alammoodulites atribuuti “#[global_allocator]”;
  • Lisatud funktsioon std::any::tüübi_nimi, mis võimaldab teil teada saada tüübi nime, mis võib olla kasulik silumiseks. Näiteks saate programmi täitmise ajal teada, mis tüüpi funktsiooni kutsuti:

    fn gen_value‹T: Vaikimisi>() -› T {
    println!("Teenuse {} eksemplari initsialiseerimine", std::any::tüübi_nimi::‹T›());
    Vaikimisi::default()
    }

    fn main() {
    las _: i32 = gen_väärtus(); # "i32" prinditakse
    let _: String = gen_value(); # prindib "alloc::string::String"
    }

  • Standardteegi laiendatud funktsioonid:
    • slice::{concat, connect, join} saab nüüd lisaks &T;
    • "*const T" ja "*mut T" rakendavad nüüd markerit::Unpin;
    • "Arc‹[T]›" ja "Rc‹[T]›" rakendavad nüüd FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} rakendab nüüd DoubleEndedIteratori.
    • ascii::EscapeDefault rakendab klooni ja kuvamist.
  • Uus osa API-sid on üle viidud stabiilsesse kategooriasse, sealhulgas meetodid, mis on stabiliseeritud
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Kestus::as_secs_f{32|64},
    • Kestus::div_duration_f{32|64},
    • Kestus::div_f{32|64},
    • Kestus::from_secs_f{32|64},
    • Kestus::mul_f{32|64},
    • jagamise operatsioonid jäägiga
      div_euclid ja rem_euclid kõigi täisarvu primitiivide jaoks;

  • Lisatud tugi suvandi “--features” mitmekordseks täpsustamiseks, et võimaldada kaubapaketi halduris erinevaid funktsioone;
  • Kompilaator annab kolmanda tase sihtplatvormide tugi aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc sihtmärgid-,-mlinuxvc -gnueabi, armv7-unknown-linux-musleabi, kuusnurk-tundmatu-linux-musl ja riscv7i-unknown-none-elf. Kolmas tase hõlmab põhituge, kuid ilma automaatse testimise ja ametlike ehituste avaldamiseta.

Allikas: opennet.ru

Lisa kommentaar