Programmeerimiskeele Rust 1.40 vÀljaanne

Avaldatud sĂŒsteemse programmeerimise keele vĂ€ljaanne Rust 1.40, mille Mozilla. Keel keskendub mĂ€lu ohutusele, tagab automaatse mĂ€lu juhtimise ja pakub tööde kĂ”rge paralleelsuse saavutamise vahendeid, ilma et oleks vaja prĂŒgikorjajat ja runtime.

Rustis tagab automaatne mĂ€lu haldamine arendajale mĂ€lukĂ€itlemise manipuleerimise vabastamise ja kaitseb madala taseme mĂ€lu töötlemisega seotud probleemide eest, nagu mĂ€lu kasutamine pĂ€rast selle vabastamist, nullviidete de-referentsimine, puhverduspiiride ĂŒletamine jne. Raamatukogude jagamiseks, koostamise tagamiseks ja sĂ”ltuvuste haldamiseks arendatakse pakihaldurit Cargo, mis vĂ”imaldab vajalikke raamatukogusid ĂŒhe klikiga hankida. Raamatukogude paigutamiseks toetatakse hoidlapaiku crates.io.

Peamised uuendused:

  • Lisatud on vĂ”imalus mĂ€rkida struktuure (struct) ja loendeid (enum) bloki Variant abil atribuudiga «#[non_exhaustive]«, mille lubab abil on edaspidi vĂ”imalik lisada uusi vĂ€lju ja variante vĂ€lja kuulutatud struktuuridesse ja loenditesse. NĂ€iteks saavad moodulite arendajad, kellel on avalikult vĂ€lja kuulutatud vĂ€ljad, kasutada «#[non_exhaustive]» nende struktuuride mĂ€rkimiseks, kus tulevikus on vĂ”imalik lisada uusi vĂ€lju. Seni pidi arendaja sellises olukorras valima kas privaatsete vĂ€ljade kuulutamise ja muutumatute vĂ€ljade nimekirjaga sidumise vahel. Uus atribuut kĂ”rvaldab selle piiratuse ja vĂ”imaldab tulevikus uusi vĂ€lju lisada, ilma et see ohustaks varasemate vĂ€liste koodide töö. Crate-pakettides, kui variantide sobitamisel jaotises «match», on nĂ”utav selge maski defineerimine «_ => {
}», mis katab vĂ”imalikke tulevasi vĂ€lju, vastasel juhul tekib uute vĂ€ljade lisamisel viga.
  • Lisatud vĂ”imalus kutsuda protseduuriline makro mac!() tĂŒĂŒbi kontekstis. NĂ€iteks on nĂŒĂŒd vĂ”imalik kirjutada «type Foo = expand_to_type!(bar);», kui «expand_to_type» on protseduuriline makro.
  • Blokkides «extern { 
 }» on lisatud vĂ”imalus kasutada protseduurilisi ja atribuudi makroseid, sealhulgas makroseid „bang!()“, nĂ€iteks:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alpha);
    make_item!(beta);
    }

    extern "C" {
    #[my_identity_macro]
    fn foo();
    }

  • Makrose kohta on rakendatud vĂ”imalus genereerida elemente „macro_rules!“. Generatsioon „macro_rules!“ on vĂ”imalik nii funktsiooni sarnastes makroseis („mac!()“) kui ka atribuudivormis makroseis („#[mac]“).
  • Elementi vastavuses $m:meta on lisatud toetab suvalisi vÀÀrtusi tokenite loendite („[TOKEN_STREAM]“, „{TOKEN_STREAM}“ ja „(TOKEN_STREAM)“), nĂ€iteks:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • Rust 2015 reĆŸiimis on aktiveeritud vigade vĂ€ljund, et tegeleda probleemidega, mis ilmnevad muutuva laenamise kontrollimise (borrow checker) abil NLL (Non-Lexical Lifetimes) tehnika kasutamisel. Varasemalt asendati hoiatused vigadega, töötades Rust 2018 reĆŸiimis.
    PĂ€rast muudatuste laiemat rakendamist ja Rust 2015 reĆŸiimi vĂ”imaldas arendajatel lĂ”puks vabaneda vanast borrow checker'ist.

    Tulet meelde, et uus eluea jĂ€lgimise mehhanismiga pĂ”hinev kontrollisĂŒsteem on vĂ”imaldanud tuvastada teatud probleeme, mis vanas kontrollkoodis tĂ€helepanuta jĂ€etud. Kuna selleteemalise vea vĂ€ljastamine vĂ”ib mĂ”jutada varasemat koodeksisse ĂŒhilduvust, esitati esialgu veateade asemel hoiatused.

  • MĂ€rgis «const», mis mÀÀratleb, kas seda saab igas kontekstis kasutada muutumatute vÀÀrtuste asemel, on rakendatud funktsioonile is_power_of_two (ilma mĂ€rgita tĂ€isarvude jaoks).
  • Uue stabiilse partii API on lĂ€inud stabiilsete rikka seeriasse, sealhulgas stabiliseeriti makrod todo!() ja meetodid slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value,
    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,f64}::from_be_bytes, {f32,f64}::from_le_bytes ja {f32,f64}::from_ne_bytes.
  • Paketihalduris cargo
    on rakendatud kompileerimise hoiatused nende kettas. Komandisse „cargo metadata” lisatud valik „—filter-platform”, et kuvada sĂ”ltuvuste loendis ainult selliseid pakette, mis on seotud mÀÀratud sihtplatvormiga. Lisatud konfiguratsiooniparameter http.ssl-version lubatud TLS versioonide mÀÀramiseks.
    Lisatud on vÔimalus avaldada jaotist «dev-dependencies» ilma «version» vÔtme mÀÀramata.
  • Kompaileerijas rustc on tagatud kolmas tase sihtplatvormide toe jaoks thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ja mips64el-unknown-linux-muslabi64. Kolmas tase tĂ€hendab baastoetust, kuid ilma automatiseeritud testimise ja ametlike kogumite avaldamiseta.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster