Rust 1.38 Programazio Lengoaia kaleratzea

argitaratua sistemaren programazio lengoaia kaleratzea Herdoila 1.38, Mozilla proiektuak sortua. Lengoaiak memoriaren segurtasunean oinarritzen da, memoria automatikoki kudeatzen du eta zereginen paralelismo handia lortzeko bitartekoa eskaintzen du zabor-biltzaile edo exekuzio-denbora erabili gabe.

Rust-en memoria-kudeaketa automatikoak garatzailea erakusleen manipulaziotik askatzen du eta maila baxuko memoriaren manipulaziotik sortzen diren arazoetatik babesten du, hala nola, memoria librearen ondorengo sarbideetatik, erakusle nuluen deserreferentziak, buffer gainezkatzeetatik eta antzekoetatik. Liburutegiak banatzeko, muntaia ziurtatzeko eta proiektuaren mendekotasunak kudeatzeko pakete-kudeatzaile bat garatzen ari da. Zama, programarako beharrezkoak diren liburutegiak klik bakarrean eskuratu ahal izateko. Biltegi bat onartzen da liburutegiak ostatatzeko kaxak.io.

Nagusia berrikuntzak:

  • Pipelined konpilazio modu bat gehitu da (pipelined), zeinean menpeko kutxa pakete baten eraikuntza hasten den mendekotasun metadatuak erabilgarri dauden bezain laster, konpilazioa amaitu arte itxaron gabe. Pakete bat konpilatzean, menpekotasunak ez dira guztiz bildu behar, metadatuak definituz soilik, mota, menpekotasun eta esportatutako elementuen zerrendak barne hartzen dituena. Metadatuak bilketa-prozesuaren hasieran eskuragarri jartzen dira, beraz, estekatutako paketeak askoz lehenago konpila daitezke orain. Pakete bakarrak eraikitzean, proposatutako moduak ez du errendimenduan eragiten, baina eraikuntzak mendekotasun adarkatuak dituzten paketeak estaltzen baditu, eraikuntza-denbora orokorra % 10-20 murriztu daiteke;
  • Funtzioen erabilera okerra hautematea ziurtatzen du std::mem::uninitialized ΠΈ std::mem::zeroed. Adibidez, std::mem::uninitialized erosoa da matrizeak azkar sortzeko, baina konpilatzailea engainatzen du hasieratuta dagoela dirudielako, baina errealitatean balioak hasieratu gabe jarraitzen du. mem::uninitialized funtzioa zaharkituta bezala markatuta dago eta horren ordez tarteko mota bat erabiltzea gomendatzen da Agian Unitatea. Mem::zeroed-i dagokionez, funtzio honek arazoak sor ditzake zero baliorik onartu ezin duten motekin.

    Definitu gabeko portaera identifikatzen laguntzeko, bertsio berriak mem::uninitialized edo mem::zeroed-ekin arazo batzuk detektatzen dituen lint egiaztapen bat gehitzen dio konpilatzaileari. Adibidez, orain errore bat jasoko duzu mem::uninitialized edo mem::zeroed &T eta Boxβ€ΉTβ€Ί motekin erabiltzen saiatzean, balio nuluak onartu ezin dituzten erakusle-objektuak adierazten dituztenak;

  • "#[zaharkitua]" atributua zabaldu da kaxa paketeak zaharkituta markatu eta etorkizunean ezabatzeko programatu ahal izateko. Rust 1.38tik aurrera, atributu hau makroetarako ere erabil daiteke;
  • "#[global_allocator]" atributua azpimoduluetan erabiltzeko gaitasuna gehitu da;
  • Ezaugarri gehitua std::any::mota_izena, motaren izena ezagutzeko aukera ematen duena, arazketa-helburuetarako erabilgarria izan daitekeena. Adibidez, programaren exekuzioan zehar jakin dezakezu zer motatarako deitzen zen funtzioa:

    fn gen_valueβ€ΉT: Lehenetsia>() -β€Ί T {
    println!("{}-ren instantzia bat hasieratzen", std::any::type_name::β€ΉTβ€Ί());
    Lehenetsia::lehenetsia()
    }

    fn main() {
    utzi _: i32 = gen_balioa(); # "i32" inprimatuko da
    utzi _: String = gen_value(); # "alloc::string::String" inprimatuko du
    }

  • Liburutegi estandarraren funtzio hedatuak:
    • slice::{lokatu, konektatu, elkartu} orain &[T] balioa har dezake &T;
    • "*const T" eta "*mut T" orain inplementatzen dute marker::Unpin;
    • "Arcβ€Ή[T]β€Ί" eta "Rcβ€Ή[T]β€Ί" orain FromIteratorβ€ΉTβ€Ί inplementatzen dute;
    • iter::{StepBy, Peekable, Take} orain inplementatu DoubleEndedIterator.
    • ascii::EscapeDefault-ek Clone eta Display inplementatzen ditu.
  • APIen zati berri bat kategoria egonkorrera transferitu da, egonkortu diren metodoak barne
    • β€Ή*const Tβ€Ί::cast, β€Ή*mut Tβ€Ί::cast,
    • Iraupena::as_secs_f{32|64},
    • Iraupena::div_duration_f{32|64},
    • Iraupena::div_f{32|64},
    • Iraupena::from_secs_f{32|64},
    • Iraupena::mul_f{32|64},
    • zatiketa eragiketak hondarrarekin
      div_euclid eta rem_euclid osoko primitibo guztientzat;

  • "--features" aukera hainbat aldiz zehazteko laguntza gehitu da zama paketeen kudeatzailean funtzio desberdinak gaitzeko;
  • Konpilatzaileak hirugarren bat eskaintzen du maila Helburu-plataformetarako laguntza aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvcun, armsvux-msvcun -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl eta riscv7i-unknown-none-elf. Hirugarren mailak oinarrizko euskarria dakar, baina proba automatizaturik eta eraikuntza ofizialen argitalpenik gabe.

Iturria: opennet.ru

Gehitu iruzkin berria