Rust 1.39 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.39, itinatag ng proyekto ng Mozilla. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na paralelismo sa gawain nang hindi gumagamit ng basurero o 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:

  • Pinatatag isang bagong asynchronous programming syntax batay sa "async" function, ang async move { ... } block, at ang ".await" operator, na nagpapadali sa pagsulat ng mga humahawak na hindi humaharang sa pangunahing daloy ng command. Kung ikukumpara sa naunang inaalok na API para sa asynchronous na I/O, ang mga async/.await construct ay madaling maunawaan, lubos na nababasa, at nagbibigay-daan sa iyong magpatupad ng mga kumplikadong asynchronous na pakikipag-ugnayan gamit ang mga pamilyar na diskarte sa pagkontrol ng daloy batay sa mga loop, conditional statement, at exception.

    Binibigyang-daan ka ng Async-await syntax na lumikha ng mga function na maaaring i-pause ang kanilang pagpapatupad, ibalik ang kontrol sa pangunahing thread, at pagkatapos ay ipagpatuloy ang pagpapatupad mula sa kung saan sila tumigil. Halimbawa, kailangan ang ganitong pag-pause kapag nagpoproseso ng I/O, kung saan maaaring gawin ang iba pang gawain habang naghihintay na dumating ang susunod na piraso ng data. Ang mga function at block na tinukoy sa "async fn" at "async move" ay nagbabalik ng isang katangian Hinaharap, na tumutukoy sa isang ipinagpaliban na representasyon ng asynchronous computation. Maaari mong direktang simulan ang isang ipinagpaliban na pagkalkula at makuha ang resulta gamit ang operator na β€œ.await”. Walang aksyon na gagawin o paunang binalak hanggang sa tawagin ang .await, na nagbibigay-daan sa mga kumplikadong nested construct na magawa nang walang karagdagang overhead.

    async fn first_function() -> u32 { .. }
    ...
    hayaan ang hinaharap = first_function();
    ...
    let result: u32 = future.wait;

  • Pinatatag "#![feature(bind_by_move_pattern_guards)]", na nagpapahintulot sa paggamit ng mga variable na may binding type "by-move" sa mga template at gumamit ng mga sanggunian sa mga variable na ito sa seksyong "kung" ng expression na "tumugma". Halimbawa, pinapayagan na ang mga sumusunod na konstruksyon:

    fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

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

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

  • Pinapayagan ang indikasyon mga katangian kapag tinutukoy ang mga parameter ng function, pagsasara, at mga pointer ng function. Ang mga conditional na katangian ng compilation (cfg, cfg_attr) na kumokontrol sa mga diagnostic sa pamamagitan ng lint (payagan, babala, tanggihan at ipagbawal) at auxiliary macro calling attributes ay sinusuportahan.

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

  • Mga babala tungkol sa mga problemang natukoy kapag sinusuri ang paghiram ng mga variable (borrow checker) gamit ang NLL (Non-Lexical Lifetimes) technique, isinalin sa kategorya ng mga nakamamatay na pagkakamali. 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 mga babala ay napalitan na ngayon ng mga error kapag tumatakbo sa Rust 2018 mode. Sa susunod na release, ipapatupad din ang output ng error sa Rust 2015 mode, na sa wakas ay mapupuksa ang lumang borrow checker;
  • Ang attribute na "const", na tumutukoy sa posibilidad ng paggamit sa anumang konteksto sa halip na mga constant, ay ginagamit para sa mga function na Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs at overflowing_abs;

  • Ang isang bagong bahagi ng mga API ay inilipat sa stable na kategorya, kabilang ang mga pamamaraan na na-stabilize
    Pin::into_inner, Instant::checked_duration_since at Instant::saturating_duration_since;

  • Ang cargo package manager ay may kakayahan na ngayong gamitin ang extension na ".toml" para sa mga configuration file. Nagdagdag ng paunang suporta para sa pagbuo ng karaniwang library nang direkta mula sa Cargo. Idinagdag ang flag na "--workspace", na pinapalitan ang kontrobersyal na flag na "--all". Isang bagong field ang naidagdag sa metadata "maglathala", na nagbibigay-daan sa iyong mag-publish ng mga dependency sa pamamagitan ng pagtukoy ng git tag at numero ng bersyon. Nagdagdag ng opsyon sa pagsubok na "-Ztimings" upang makabuo ng HTML na ulat ng mga oras ng pagpapatupad ng iba't ibang yugto ng compilation.
  • Sa rustc compiler, kasama sa mga diagnostic na mensahe ang pag-trim sa mga buntot ng code na hindi akma sa terminal. Nagbigay ng ikatlong antas ng suporta para sa mga target na platform
    i686-unknown-uefi at sparc64-unknown-openbsd. 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