Rust 1.40 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.40, na itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng mga tool para sa pagkamit ng mataas na paralelismo sa gawain nang hindi gumagamit ng basurero at runtime.

Ang awtomatikong pamamahala ng memorya ng Rust ay nagpapalaya sa developer mula sa pagmamanipula ng pointer at pinoprotektahan laban sa mga problemang nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng mga after-free na pag-access sa memorya, null pointer dereferences, buffer overruns, at iba pa. Ang isang manager ng package ay binuo upang ipamahagi ang mga aklatan, tiyakin ang pagpupulong at pamahalaan ang mga dependency ng proyekto. Karga, na nagbibigay-daan sa iyong makuha ang mga aklatan na kailangan para sa programa sa isang pag-click. Sinusuportahan ang isang repository upang mag-host ng mga aklatan crates.io.

Ang pangunahing mga inobasyon:

  • Nagdagdag ng kakayahang markahan ang mga istruktura (struct) at enumerations (enum na may Variant block) gamit ang attribute na "#[non_exhaustive]", alin ay nagbibigay-daan sa sa hinaharap, magdagdag ng mga bagong field at opsyon sa mga ipinahayag na istruktura at enumerasyon. Halimbawa, ang mga developer ng mga module na may mga istruktura na may mga pampublikong ipinahayag na mga field ay maaaring gumamit ng "#[non_exhaustive]" upang markahan ang mga istruktura na maaaring may mga bagong field na idaragdag sa hinaharap. Hanggang ngayon, sa sitwasyong ito, napilitan ang developer na pumili sa pagitan ng pagdedeklara ng mga field nang pribado at pagsasama sa isang hindi nababagong listahan ng mga field. Ang bagong katangian ay nag-aalis ng limitasyong ito at nagbibigay-daan sa iyong magdagdag ng mga bagong field sa hinaharap nang walang panganib na masira ang dating pinagsama-samang panlabas na code. Sa mga crate package, kapag nagtutugma ng mga opsyon sa seksyong "tugma", ang isang tahasang kahulugan ng mask na "_ => {...}" ay kinakailangan, na sumasaklaw sa mga posibleng field sa hinaharap, kung hindi, isang error ang ipapakita kapag nagdaragdag ng mga bagong field.
  • Idinagdag ang kakayahang tawagan ang procedural macro mac!() sa isang uri ng konteksto. Halimbawa, maaari mo na ngayong isulat ang β€œtype Foo = expand_to_type!(bar);” kung ang β€œexpand_to_type” ay isang procedural macro.
  • Sa "extern { ... }" na mga bloke idinagdag ang kakayahang gumamit ng procedural at attribute macros, kabilang ang "bang!()" macros, halimbawa:

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

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

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

  • Sa macros ipinatupad kakayahang bumuo ng mga elemento ng β€œmacro_rules!”. Bumubuo ng "macro_rules!" posible pareho sa mga macro na tulad ng pag-andar ("mac!()") at sa mga macro sa anyo ng mga katangian ("#[mac]").
  • Sa elementong $m:meta mapping idinagdag suporta para sa mga arbitrary na halaga ng enumeration ng token ("[TOKEN_STREAM]", "{TOKEN_STREAM}" at "(TOKEN_STREAM)"), halimbawa:

    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 } );

  • Sa Rust 2015 mode, pinagana ang output ng error para sa mga problemang natukoy kapag sinusuri ang paghiram ng mga variable (borrow checker) gamit ang NLL (Non-Lexical Lifetimes) na pamamaraan. Dati, ang mga babala ay pinalitan ng mga error kapag tumatakbo sa Rust 2018 mode.
    Matapos ma-extend ang pagbabago sa Rust 2015 mode, nagawa ng mga developer sa wakas mapupuksa mula sa lumang borrow checker.

    Alalahanin natin na ang sistema ng pag-verify batay sa isang bagong mekanismo para sa pagsasaalang-alang sa buhay ng mga hiniram na variable ay naging posible upang matukoy ang ilang mga problema na hindi napansin ng lumang verification code. Dahil ang output ng error para sa mga naturang pagsusuri ay maaaring makaapekto sa pagiging tugma sa dating gumaganang code, ang mga babala ay unang inilabas sa halip na mga error.

  • Ang attribute na "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit para sa is_power_of_two function (para sa mga unsigned integer).
  • Ang isang bagong bahagi ng API ay inilipat sa stable na kategorya, kabilang ang todo!() macro at ang slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, ang mga pamamaraan ay na-stabilize.
    Pagpipilian::as_deref, Pagpipilian::as_deref_mut, Pagpipilian::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64}::to_ne_bytes f32}::from_be_bytes, {f64,f32}::from_le_bytes, at {f64,fXNUMX}::from_ne_bytes.

  • Sa kargamento ng manager ng package
    ipinatupad pag-cache ng mga babala ng compiler sa disk. Idinagdag ang opsyong "cargo metadata" sa command na "cargo metadata".--filter-platform" upang ipakita lamang ang mga pakete na nakatali sa tinukoy na target na platform sa column ng resolusyon ng dependency. Nagdagdag ng opsyon sa configuration ng http.ssl-version upang tukuyin ang mga wastong bersyon ng TLS.
    Idinagdag ang kakayahang i-publish ang seksyon "dev-dependencies" nang hindi tinukoy ang "bersyon" na key.

  • Ang rustc compiler ay nagbibigay ng ikatlong antas ng suporta para sa mga target na platform thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 at mips64el-unknown-linux-muslabi64. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang awtomatikong pagsubok at paglalathala ng mga opisyal na build.

Pinagmulan: opennet.ru

Magdagdag ng komento