Publikimi i gjuhës programuese Rust 1.40

botuar lëshimi i gjuhës programuese të sistemit Ndryshku 1.40, e themeluar nga projekti Mozilla. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe ofron mjete për arritjen e paralelizmit të lartë të detyrave pa përdorur një grumbullues mbeturinash dhe Runtime.

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ë:

  • U shtua aftësia për të shënuar struktura (strukturë) dhe numërime (numërim me bllokun Variant) duke përdorur atributin "#[jo_shteruese]", e cila Kjo i lejon në të ardhmen, shtoni fusha dhe opsione të reja në strukturat dhe numërimet e deklaruara. Për shembull, zhvilluesit e moduleve që kanë struktura me fusha të deklaruara publikisht mund të përdorin "#[non_exhaustive]" për të shënuar strukturat që mund të kenë fusha të reja të shtuara në të ardhmen. Deri më tani, në këtë situatë, zhvilluesi ishte i detyruar të zgjidhte midis deklarimit të fushave private dhe lidhjes me një listë të pandryshueshme fushash. Atributi i ri heq këtë kufizim dhe ju lejon të shtoni fusha të reja në të ardhmen pa rrezikun e prishjes së kodit të jashtëm të përpiluar më parë. Në paketat e arkës, kur përputhen opsionet në seksionin "përputhje", kërkohet një përkufizim i qartë i maskës "_ => {...}", që mbulon fushat e mundshme të ardhshme, përndryshe do të shfaqet një gabim kur shtohen fusha të reja.
  • Shtuar aftësia për të thirrur makro procedurale mac!() në një kontekst tip. Për shembull, tani mund të shkruani “type Foo = expand_to_type!(bar);” nëse “expand_to_type” është një makro procedurale.
  • Në blloqet "e jashtme { ... }". shtuar aftësia për të përdorur makrot procedurale dhe atribute, duke përfshirë makrot "bang!()", për shembull:

    makro_rregullat! artikulli_make { ($name:ident) => { fn $name(); } }

    e jashtme {
    make_artikull!(alfa);
    make_item!(beta);
    }

    e jashtme "C" {
    #[identiteti_im_makro] fn foo();
    }

  • Në makro zbatuar aftësia për të gjeneruar elemente "macro_rules!". Gjenerimi i "macro_rules!" e mundur si në makrot e ngjashme me funksionin (“mac!()”) dhe në makro në formën e atributeve (“#[mac]”).
  • Në elementin e hartës $m:meta shtuar mbështetje për vlerat arbitrare të numërimit të shenjave ("[TOKEN_STREAM]", "{TOKEN_STREAM}" dhe "(TOKEN_STREAM)"), për shembull:

    makro_rregullat! prano_meta { ($m:meta) => {} }
    prano_meta!( my::rruga );
    prano_meta!( my::rruga = "lit" );
    pran_meta!( my::rruga ( abc ) );
    pran_meta!( my::rruga [ abc ] );
    prano_meta!( my::rruga { abc } );

  • Në modalitetin Rust 2015, dalja e gabimit aktivizohet për problemet e identifikuara gjatë kontrollit të huazimit të variablave (kontrolluesi i huasë) duke përdorur teknikën NLL (Jetëgjatësi jo leksikore). Më parë, paralajmërimet u zëvendësuan me gabime kur funksiononin në modalitetin Rust 2018.
    Pasi ndryshimi u shtri në modalitetin Rust 2015, zhvilluesit më në fund ishin në gjendje shpëtoj nga kontrolluesi i vjetër i huasë.

    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.

  • Atributi “const”, i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret për funksionin is_power_of_two (për numrat e plotë të panënshkruar).
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë makronin todo!() dhe slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodat janë stabilizuar.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, f32}::from_be_bytes, {f64,f32}::from_le_bytes dhe {f64,f32}::from_ne_bytes.

  • Në ngarkesën e menaxherit të paketës
    zbatuar ruajtja e paralajmërimeve të përpiluesit në disk. U shtua opsioni "Metadata e ngarkesave" në komandën "Metadata e ngarkesave".--filtër-platformë" për të shfaqur vetëm paketat e lidhura me platformën e synuar të specifikuar në kolonën e zgjidhjes së varësisë. U shtua opsioni i konfigurimit të versionit http.ssl për të përcaktuar versionet e vlefshme TLS.
    U shtua aftësia për të publikuar seksionin "dev-varësi" pa specifikuar tastin "version".

  • Përpiluesi rustc ofron mbështetje të nivelit të tretë për platformat e synuara thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 dhe mips64el-unknown-linux-muslabi64. 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