Publikimi i gjuhës programuese Rust 1.39

botuar lëshimi i gjuhës programuese të sistemit Ndryshku 1.39, e themeluar nga projekti Mozilla. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe ofron një mjet për të arritur paralelizëm të lartë të detyrave pa përdorur një grumbullues mbeturinash ose kohëzgjatjeje.

Menaxhimi automatik i kujtesës i Rust e çliron zhvilluesin nga manipulimi i treguesit dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të kujtesës, të tilla si akseset e memories pa pagesë, çreferencat e treguesit null, tejkalimet e buferit dhe të ngjashme. Një menaxher paketash po zhvillohet për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë nga projekti. ngarkesë, duke ju lejuar të merrni bibliotekat e nevojshme për programin me një klik. Një depo mbështetet për të pritur bibliotekat arka.io.

Kryesore risitë:

  • I stabilizuar një sintaksë e re programimi asinkrone e bazuar në funksionin "async", bllokun async move { ... } dhe operatorin ".wait", i cili e bën më të lehtë shkrimin e mbajtësve që nuk bllokojnë rrjedhën kryesore të komandave. Krahasuar me API-në e ofruar më parë për I/O asinkrone, konstruktet async/.wait janë të thjeshta për t'u kuptuar, shumë të lexueshme dhe ju lejojnë të zbatoni ndërveprime komplekse asinkrone duke përdorur teknika të njohura të kontrollit të rrjedhës bazuar në unazat, deklaratat e kushtëzuara dhe përjashtimet.

    Sintaksa Async-prit ju lejon të krijoni funksione që mund të ndalojnë ekzekutimin e tyre, të kthejnë kontrollin në fillin kryesor dhe më pas të rifillojnë ekzekutimin nga ku e kanë lënë. Për shembull, një pauzë e tillë kërkohet kur përpunohet I/O, në të cilën mund të kryhen punë të tjera ndërkohë që pritet të mbërrijë pjesa tjetër e të dhënave. Funksionet dhe blloqet e përcaktuara me "async fn" dhe "async move" kthejnë një tipar Future, i cili përcakton një paraqitje të shtyrë të llogaritjes asinkrone. Ju mund të filloni drejtpërdrejt një llogaritje të shtyrë dhe të merrni rezultatin duke përdorur operatorin ".wait". Asnjë veprim nuk kryhet apo planifikohet paraprakisht derisa të thirret .wait, duke lejuar krijimin e konstrukteve komplekse të ndërthurura pa shpenzime shtesë.

    async fn first_function() -> u32 { .. }
    ...
    le të ardhmen = first_function();
    ...
    le të rezultojë: u32 = ardhmëri.prit;

  • I stabilizuar "#![feature(bind_by_move_pattern_guards)]", duke lejuar përdorimin e variablave me llojin e lidhjes "me lëvizje" në shabllone dhe përdorni referenca për këto variabla në seksionin "nëse" të shprehjes "ndeshje". Për shembull, ndërtimet e mëposhtme tani lejohen:

    fn main() {
    le të array: Kutia<[u8; 4]> = Kutia::i ri([1, 2, 3, 4]);

    përputhet me grupin {
    numrat
    nëse nums.iter().shuma::() == 10

    => {
    rënie (numrat);
    }
    _ => i paarritshëm!(),
    }
    }

  • Indikacioni i lejuar atributet kur përcaktohen parametrat e funksionit, mbylljet dhe treguesit e funksionit. Mbështeten atributet e kompilimit të kushtëzuar (cfg, cfg_attr) që kontrollojnë diagnostifikimin nëpërmjet lintit (lejoni, paralajmëroni, mohoni dhe ndaloni) dhe atributet ndihmëse të thirrjes makro.

    fn len (
    #[cfg(windows)] feta: &[u16], // përdorni parametrin në Windows
    #[cfg(not(windows))] copë: &[u8], // përdoret në OS të tjera
    ) -> përdor {
    slice.len ()
    }

  • Paralajmërimet në lidhje me problemet e identifikuara gjatë kontrollit të huazimit të variablave (kontrolluesi i huasë) duke përdorur teknikën NLL (Jetëgjatësi jo leksikore), përkthyer në kategorinë e gabimeve fatale. Kujtojmë se sistemi i verifikimit i bazuar në një mekanizëm të ri për marrjen parasysh të jetëgjatësisë së variablave të huazuar bëri të mundur identifikimin e disa problemeve që kaluan pa u vënë re nga kodi i vjetër i verifikimit. Meqenëse rezultati i gabimit për kontrolle të tilla mund të ndikojë në përputhshmërinë me kodin e mëparshëm të punës, fillimisht u lëshuan paralajmërime në vend të gabimeve. Paralajmërimet tani janë zëvendësuar me gabime kur funksionojnë në modalitetin Rust 2018. Në versionin tjetër, dalja e gabimit do të zbatohet gjithashtu në modalitetin Rust 2015, i cili më në fund do të heqë qafe kontrolluesin e vjetër të huasë;
  • Atributi “const”, i cili përcakton mundësinë e përdorimit në çdo kontekst në vend të konstanteve, përdoret për funksionet Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, mbështjellës_abs dhe tejmbushur_abs;

  • Një pjesë e re e API-ve është transferuar në kategorinë e qëndrueshme, duke përfshirë metodat që janë stabilizuar
    Pin::into_inner, Instant::checked_duration_since dhe Instant::saturating_duration_since;

  • Menaxheri i paketave të ngarkesave tani ka mundësinë të përdorë shtesën ".toml" për skedarët e konfigurimit. U shtua mbështetje paraprake për ndërtimin e bibliotekës standarde direkt nga Cargo. U shtua flamuri "--workspace", duke zëvendësuar flamurin e diskutueshëm "--all". Një fushë e re është shtuar në meta të dhënat "publikoj", e cila ju lejon të publikoni varësitë duke specifikuar një etiketë git dhe numrin e versionit. U shtua opsioni i testimit "-Ztimings" për të gjeneruar një raport HTML të kohërave të ekzekutimit të fazave të ndryshme të përpilimit.
  • Në përpiluesin rustc, mesazhet diagnostikuese përfshijnë shkurtimin e pjesëve të kodit që nuk përshtaten në terminal. Ofrohet niveli i tretë i mbështetjes për platformat e synuara
    i686-unknown-uefi dhe sparc64-unknown-openbsd. Niveli i tretë përfshin mbështetjen bazë, por pa testime dhe publikime të automatizuara të ndërtimeve zyrtare.

Burimi: opennet.ru

Shto një koment