Rust 1.40 Programming Language Release

gipatik pagpagawas sa pinulongan sa sistema sa programming Taya 1.40, gitukod sa proyekto sa Mozilla. Ang lengguwahe nagtutok sa kaluwasan sa panumduman, naghatag og awtomatik nga pagdumala sa panumduman, ug naghatag og mga himan alang sa pagkab-ot sa taas nga paralelismo sa buluhaton nga walay paggamit ug tigkolekta sa basura ug runtime.

Ang awtomatik nga pagdumala sa memorya ni Rust nagpalingkawas sa developer gikan sa pagmaniobra sa pointer ug nanalipod batok sa mga problema nga naggikan sa ubos nga lebel sa pagmaniobra sa memorya, sama sa human-free nga memory access, null pointer dereferences, buffer overruns, ug uban pa. Usa ka manedyer sa pakete ang gipalambo aron sa pag-apod-apod sa mga librarya, pagsiguro sa asembliya ug pagdumala sa mga dependency sa proyekto. Cargo, nga nagtugot kanimo nga makuha ang mga librarya nga gikinahanglan alang sa programa sa usa ka pag-klik. Gisuportahan ang usa ka repository sa pag-host sa mga librarya crates.io.

nag-unang mga inobasyon:

  • Gidugang ang abilidad sa pagmarka sa mga istruktura (istruktura) ug mga enumerasyon (enum nga adunay Variant block) gamit ang attribute "#[dili_kompleto]", nga kini nagtugot sa umaabot, pagdugang bag-ong mga natad ug mga kapilian sa gideklarar nga mga istruktura ug mga enumerasyon. Pananglitan, ang mga nag-develop sa mga module nga adunay mga istruktura nga gipahayag sa publiko nga mga field mahimong mogamit sa "#[non_exhaustive]" aron markahan ang mga istruktura nga mahimong adunay bag-ong mga field nga idugang sa umaabot. Hangtud karon, sa kini nga sitwasyon, ang developer napugos sa pagpili tali sa pagdeklarar sa mga natad nga pribado ug pagbugkos sa usa ka dili mausab nga listahan sa mga natad. Gitangtang sa bag-ong hiyas kini nga limitasyon ug gitugotan ka nga makadugang bag-ong mga natad sa umaabot nga wala’y peligro nga mabuak ang naipon nga eksternal nga code. Sa mga pakete sa crate, kung magtugma sa mga kapilian sa seksyon nga "match", gikinahanglan ang usa ka klaro nga kahulugan sa maskara "_ => {...}", nga naglangkob sa posible nga umaabut nga mga uma, kung dili usa ka sayup ang ipakita kung magdugang bag-ong mga uma.
  • Gidugang ang abilidad sa pagtawag sa procedural macro mac!() sa usa ka tipo nga konteksto. Pananglitan, mahimo nimong isulat ang "type Foo = expand_to_type!(bar);" kung ang "expand_to_type" usa ka procedural macro.
  • Sa "extern { ... }" blocks gidugang ang abilidad sa paggamit sa procedural ug attribute macros, lakip ang "bang!()" macros, pananglitan:

    macro_rules! make_item { ($ngalan: identidad) => { fn $ngalan(); }}

    gawas {
    paghimo_butang!(alpha);
    make_item!(beta);
    }

    gawas nga "C" {
    #[akong_identity_macro] fn foo();
    }

  • Sa mga macro gipatuman abilidad sa pagmugna og "macro_rules!" nga mga elemento. Pagmugna og "macro_rules!" posible nga pareho sa function-like macros (β€œmac!()”) ug sa macros sa porma sa mga attributes (β€œ#[mac]”).
  • Sa $m:meta mapping nga elemento gidugang suporta para sa arbitraryong token enumeration values ​​​​("[TOKEN_STREAM]", "{TOKEN_STREAM}" ug "(TOKEN_STREAM)"), pananglitan:

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

  • Sa Rust 2015 mode, ang output sa sayup gipagana alang sa mga problema nga nahibal-an kung gisusi ang paghulam sa mga variable (borrow checker) gamit ang NLL (Non-Lexical Lifetimes) nga teknik. Kaniadto, ang mga pasidaan gipulihan sa mga sayup kung nagdagan sa Rust 2018 mode.
    Pagkahuman sa pagbag-o gipalapdan sa Rust 2015 mode, ang mga developer nakahimo sa katapusan wagtangon gikan sa daan nga borrow checker.

    Atong hinumdoman nga ang sistema sa pag-verify nga gibase sa usa ka bag-ong mekanismo alang sa pagkonsiderar sa tibuok kinabuhi sa hinulaman nga mga baryable nagpaposible sa pag-ila sa pipila ka mga problema nga wala mamatikdi sa daan nga verification code. Tungod kay ang output sa sayup alang sa ingon nga mga tseke mahimong makaapekto sa pagkaangay sa kaniadto nga nagtrabaho nga code, ang mga pasidaan una nga gi-isyu imbes nga mga sayup.

  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbes sa mga constants, gigamit alang sa is_power_of_two function (alang sa unsigned integers).
  • Usa ka bag-ong bahin sa API ang gibalhin ngadto sa stable nga kategorya, lakip ang todo!() macro ug ang slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, mga pamaagi na-stabilize.
    Opsyon::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}::gikan sa_be_bytes, {f64,f32}::gikan sa_le_bytes, ug {f64,f32}::gikan sa_ne_bytes.

  • Sa package manager nga kargamento
    gipatuman caching compiler nga mga pasidaan sa disk. Gidugang ang opsyon nga "cargo metadata" sa "cargo metadata" nga sugo--filter-plataporma" aron ipakita lamang ang mga pakete nga gigapos sa piho nga target nga plataporma sa kolum sa resolusyon sa dependency. Gidugang ang http.ssl-version configuration nga opsyon aron ipasabot ang balido nga mga bersyon sa TLS.
    Gidugang ang abilidad sa pagmantala sa seksyon "dev-dependencies" nga wala ipiho ang "bersyon" nga yawe.

  • Ang rustc compiler naghatag og ikatulo nga lebel nga suporta alang sa mga target nga plataporma thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 ug mips64el-unknown-linux-muslabi64. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay ug pagmantala sa mga opisyal nga pagtukod.

Source: opennet.ru

Idugang sa usa ka comment