Rust 1.39 Programming Language Release

gipatik pagpagawas sa pinulongan sa sistema sa programming Taya 1.39, gitukod sa proyekto sa Mozilla. Ang lengguwahe nagpunting sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag usa ka paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga wala mogamit usa ka tigkolekta sa basura o oras sa pagdagan.

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:

  • Gipalig-on usa ka bag-ong asynchronous programming syntax nga gibase sa "async" function, ang async move {... } block, ug ang ".wait" operator, nga makapasayon ​​sa pagsulat sa mga handler nga dili makababag sa main command flow. Kung itandi sa kaniadto nga gitanyag nga API alang sa asynchronous nga I/O, ang async/.await constructs kay sayon ​​sabton, kaayo mabasa, ug motugot kanimo sa pagpatuman sa komplikadong asynchronous nga mga interaksyon gamit ang pamilyar nga mga pamaagi sa pagkontrol sa dagan base sa mga loops, conditional statements, ug mga eksepsiyon.

    Gitugotan ka sa Async-wait syntax nga makahimo og mga function nga makapahunong sa ilang pagpatuman, ibalik ang kontrol sa main thread, ug dayon ipadayon ang pagpatuman gikan sa kung diin sila mihunong. Pananglitan, gikinahanglan ang ingon nga paghunong sa pagproseso sa I/O, diin mahimo ang ubang trabaho samtang naghulat sa sunod nga piraso sa datos nga moabot. Ang mga gimbuhaton ug mga bloke nga gihubit nga adunay "async fn" ug "async nga paglihok" nagbalik usa ka kinaiya Kaugmaon, nga naghubit sa usa ka gi-defer nga asynchronous nga representasyon sa pag-compute. Mahimo nimong direkta nga magsugod ang usa ka gilangan nga kalkulasyon ug makuha ang resulta gamit ang ".naghulat" nga operator. Wala’y aksyon nga gihimo o giplano nang daan hangtod nga gitawag ang .paghulat, nga gitugotan ang mga komplikado nga nested construct nga mahimo nga wala’y dugang nga overhead.

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    let result: u32 = umaabot.naghulat;

  • Gipalig-on "#![feature(bind_by_move_pattern_guards)]", nga nagtugot sa paggamit sa mga variable nga adunay binding type "pinaagi sa paglihok" sa mga templates ug gamita ang mga pakisayran sa kini nga mga variable sa seksyon nga "kon" sa ekspresyon "match". Pananglitan, ang mosunod nga mga konstruksyon gitugotan na karon:

    fn main() {
    let array: Kahon<[u8; 4]> = Kahon::bag-o([1, 2, 3, 4]);

    match array {
    nums
    kung nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => dili maabot!(),
    }
    }

  • Gitugotan ang timailhan mga hiyas sa pagtino sa function parameters, closures, ug function pointers. Gisuportahan ang mga kondisyon sa paghugpong (cfg, cfg_attr) nga nagkontrol sa mga diagnostic pinaagi sa lint (gitugotan, gipasidaan, gibalibaran ug gidili) ug mga auxiliary nga macro calling.

    fn len(
    #[cfg(windows)] slice: &[u16], // gamita ang parameter sa Windows
    #[cfg(not(windows))] slice: &[u8], // gamiton sa ubang OS
    ) -> gamita ang {
    slice.len()
    }

  • Mga pasidaan bahin sa mga problema nga nahibal-an kung gisusi ang paghulam sa mga variable (borrow checker) gamit ang NLL (Non-Lexical Lifetimes) nga teknik, gihubad ngadto sa kategoriya sa makamatay nga mga sayop. 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 imbis nga mga sayup. Ang mga pasidaan karon gipulihan sa mga sayup kung nagdagan sa Rust 2018 mode. Sa sunod nga pagpagawas, ang output sa sayup ipatuman usab sa Rust 2015 mode, nga sa katapusan mapapas ang daan nga borrow checker;
  • Ang "const" attribute, nga nagtino sa posibilidad sa paggamit sa bisan unsa nga konteksto imbes sa mga constants, gigamit alang sa mga function Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs ug overflowing_abs;

  • Usa ka bag-ong bahin sa mga API ang gibalhin sa stable nga kategorya, lakip ang mga pamaagi nga na-stabilize
    Pin::into_inner, Instant::checked_duration_since ug Instant::saturating_duration_since;

  • Ang tagdumala sa pakete sa kargamento karon adunay katakus sa paggamit sa extension nga ".toml" alang sa mga file sa pag-configure. Gidugang preliminary nga suporta alang sa pagtukod sa standard library direkta gikan sa Cargo. Gidugang ang "--workspace" nga bandila, gipuli ang kontrobersyal nga "--all" nga bandila. Usa ka bag-ong field ang gidugang sa metadata "imantala", nga nagtugot kanimo sa pagmantala sa mga dependency pinaagi sa pagtino sa usa ka git tag ug numero sa bersyon. Gidugang ang opsyon sa pagsulay nga "-Ztimings" aron makamugna og HTML nga report sa mga panahon sa pagpatuman sa lain-laing mga yugto sa paghugpong.
  • Sa rustc compiler, ang mga diagnostic nga mensahe naglakip sa pagputol sa mga ikog sa code nga dili mohaum sa terminal. Naghatag ikatulo nga lebel sa suporta alang sa mga target nga platform
    i686-unknown-uefi ug sparc64-unknown-openbsd. 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