Rust 1.40 Kutulutsa Chilankhulo cha Mapulogalamu

Lofalitsidwa kutulutsidwa kwa chilankhulo cha pulogalamu yadongosolo Dzimbiri 1.40, yokhazikitsidwa ndi polojekiti ya Mozilla. Chilankhulochi chimayang'ana kwambiri pachitetezo cha kukumbukira, chimapereka kasamalidwe ka kukumbukira, ndipo chimapereka zida zogwirira ntchito limodzi popanda kugwiritsa ntchito chotolera zinyalala komanso nthawi yothamanga.

Kuwongolera kukumbukira kwa Rust kumamasula wopanga kuti asasokonezedwe ndi pointer ndikutchinjiriza ku zovuta zomwe zimadza chifukwa chakuwongolera kukumbukira kwapang'onopang'ono, monga kulowa kwa kukumbukira kwaulere, kusokoneza null pointer, buffer overruns, ndi zina zotero. Woyang'anira phukusi akupangidwa kuti azigawira malaibulale, kuwonetsetsa kusonkhanitsa ndi kuyang'anira zodalira ndi polojekiti. katundu, kukulolani kuti mupeze malaibulale ofunikira pa pulogalamuyo ndikudina kamodzi. Malo osungiramo mabuku amathandizidwa kuti azisunga malaibulale makate.io.

waukulu zatsopano:

  • Anawonjezera luso lolemba zolemba (mapangidwe) ndi zowerengera (enum ndi Variant block) pogwiritsa ntchito mawonekedwe "#[zosakwanira]", amene timatha m'tsogolomu, onjezani minda yatsopano ndi zosankha kuzinthu zolengezedwa ndi zowerengera. Mwachitsanzo, opanga ma module omwe ali ndi magawo omwe adalengezedwa pagulu atha kugwiritsa ntchito "#[non_exhaustive]" kuyika zida zomwe zitha kuwonjezeredwa mtsogolo. Mpaka pano, muzochitika izi, woyambitsa adakakamizika kusankha pakati pa kulengeza minda mwachinsinsi ndikumangiriza ku mndandanda wosasinthika wa minda. Makhalidwe atsopanowa amachotsa izi ndikukulolani kuti muwonjezere magawo atsopano mtsogolomu popanda chiopsezo chophwanya code yakunja yomwe idapangidwa kale. M'mapaketi a crate, pofananiza zosankha mu gawo la "machesi", tanthauzo lomveka la chigoba "_ => {...}" likufunika, kuphimba minda yomwe ingathe mtsogolo, apo ayi cholakwika chidzawonetsedwa powonjezera minda yatsopano.
  • Zowonjezedwa Kutha kuyimbira njira macro mac!() mumtundu wamtundu. Mwachitsanzo, tsopano mutha kulemba β€œtype Foo = expand_to_type!(bar);” ngati β€œexpand_to_type” ndi njira yayikulu.
  • Mu midadada "yakunja {...}". anawonjezera Kutha kugwiritsa ntchito ma macros procedural and attribute macros, kuphatikiza "bang!()" macros, mwachitsanzo:

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

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

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

  • Mu macros zakhazikitsidwa kuthekera kopanga zinthu za "macro_rules!". Kupanga "macro_rules!" zotheka ponse pawiri ngati macros ("mac!()") ndi macros mu mawonekedwe a mawonekedwe ("#[mac]").
  • Mugawo la $m:meta mapu anawonjezera kuthandizira pazowerengera za ma tokeni mosasintha ("[TOKEN_STREAM]", "{TOKEN_STREAM}" ndi "(TOKEN_STREAM)"), mwachitsanzo:

    macro_rules! accept_meta { ($m:meta) => {}}
    accept_meta!( yanga::njira);
    accept_meta!( my::path = "lit" );
    accept_meta!( yanga::njira ( abc ));
    accept_meta!( my::path [ abc ] );
    accept_meta!( yanga::njira {abc});

  • Mu Rust 2015 mode, kutulutsa zolakwika kumayatsidwa pamavuto omwe azindikirika poyang'ana kubwereka kwa zosintha (zobwereketsa) pogwiritsa ntchito njira ya NLL (Non-Lexical Lifetimes). M'mbuyomu, machenjezo adasinthidwa ndi zolakwika akamayendetsa Rust 2018 mode.
    Kusinthako kutakulitsidwa ku Rust 2015 mode, opanga adatha pomaliza kuthana ndi kuchokera kwa wobwereketsa wakale.

    Tikumbukenso kuti njira yotsimikizira yotengera njira yatsopano yoganizira za moyo wamitundu yobwereka idapangitsa kuti zitheke kuzindikira zovuta zina zomwe sizinawonekere ndi nambala yakale yotsimikizira. Popeza kutulutsa zolakwika pamacheke otere kungakhudze kugwirizana ndi ma code omwe adagwirapo kale, machenjezo adaperekedwa poyamba m'malo mwa zolakwika.

  • Lingaliro la "const", lomwe limatsimikizira kuthekera kogwiritsa ntchito mwanjira iliyonse m'malo mwa zokhazikika, limagwiritsidwa ntchito pa is_power_of_two function (kwa manambala osasainidwa).
  • Gawo latsopano la API lasunthidwa kugawo lokhazikika, kuphatikiza todo!() macro ndi kagawo::repeat, mem::take, BtreeMap::get_key_value, HashMap::get_key_value, njira zakhazikika.
    Njira::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}::kuchokera_be_bytes, {f64,f32}::kuchokera_le_bytes, ndi {f64,f32}::kuchokera_ne_bytes.

  • Mu phukusi woyang'anira katundu
    zakhazikitsidwa caching compiler machenjezo pa disk. Anawonjezera njira "katundu metadata" kuti "katundu metadata" lamulo--sefa-nsanja" kuwonetsa maphukusi okha omwe amangiriridwa ku nsanja yomwe yatchulidwa pamndandanda wa kudalira. Adawonjezedwa kuti http.ssl-version configuration njira kutanthauzira zovomerezeka za TLS.
    Anawonjezera kuthekera kofalitsa gawoli "dev-zodalira" popanda kutchula kiyi ya "version".

  • Rustc compiler imapereka chithandizo chachitatu chandamale chandamale thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ndi mips64el-osadziwika-linux-muslabi64. Mulingo wachitatu umakhudzanso chithandizo choyambirira, koma popanda kuyezetsa ndi kufalitsa zomanga zovomerezeka.

Source: opennet.ru

Kuwonjezera ndemanga