Rust 1.42 Programming Language Release

Nai-publish release ng system programming language Kalawang 1.42, 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:

  • Idinagdag suporta para sa mga template para sa pagtutugma ng mga bahagi ng mga hiwa (dynamic na array, slice). Dati, pinahihintulutan ang mga eksaktong tugma, ngunit ngayon ay posible nang gumamit ng mga construct na may markang ".." upang masakop ang natitirang mga elemento ng array. Halimbawa:

    fn foo(mga salita: &[&str]) {
    tugmang salita {

    // sinusuri ang mga panimulang elemento ng array at binabalewala
    mga elementong sumusunod sa kanila
    ["Hello", "World", "!", ..] => println!("Hello World!"),

    // sinusuri ang unang dalawang elemento na "Foo" at "Bar", at ang iba ay hindi mahalaga
    ["Foo", "Bar", ..] => println!("Baz"),

    // huwag pansinin ang lahat, ngunit ang huling elemento ay dapat na "!".
    [.., β€œ!”] => println!(β€œ!!!”),

    // sa panimulang hiwa kasama namin ang lahat maliban sa huling elemento, na dapat ay "z"
    [simulan @ .., "z"] => println!("nagsisimula sa: {:?}", simulan),

    // sa dulo ng slice inilalagay namin ang lahat maliban sa unang elemento, na dapat ay "a".
    ["a", end @ ..] => println!("nagtatapos sa: {:?}", end),

    pahinga => println!("{:?}", pahinga),
    }
    }

  • Nagdagdag ng bagong macro "matches!", na kumukuha ng expression at pattern bilang input, at nagbabalik ng "true" kung tumutugma ang pattern sa expression. Ang template ay maaaring gumamit ng "|" na mga pagpapatakbo at kung".

    tumugma sa self.partial_cmp(other) {
    Some(Mas) => totoo,
    _ => hindi totoo,
    }

    tumutugma!(self.partial_cmp(other), Some(Mas))

    let foo = 'f';
    igiit!(match!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Some(4);
    igiit!(match!(bar, Some(x) if x > 2));

  • Sa mga panic na mensahe na ipinapakita kapag ginamit nang hindi tama
    mga uri ng Opsyon at Resulta, ngayon ay nagpapakita ng mga numero ng linya na may link sa code na gumawa ng problemang tawag, sa halip na mga link sa code na nagpapatupad ng tawag sa libcore. Halimbawa, ang pagbabago ay nakakaapekto sa mga tawag na i-unwrap at asahan sa Option::None, o nag-crash kapag gumagamit ng unwrap_err, expect, expect_err, at mga katulad na pamamaraan sa Resulta uri.

  • Ang Cargo package manager ay nagbibigay ng awtomatikong pagpapalit ng "proc_macro crate" sa "extern" block para sa mga package na may procedural macros. Ang pagbabagong ito ay nagbibigay-daan sa "paggamit" na direktiba na mailapat sa mga procedural macro nang hindi kinakailangang tukuyin ang "extern crate proc_macro;" sa code. Halimbawa, kung ang programa ay gumagamit ng linyang "use proc_macro::TokenStream;", kung gayon ang code ay mananatiling gumagana kung ang "extern crate proc_macro;" ay aalisin dito.
  • Ang mga kakayahan ng karaniwang aklatan ay pinalawak. Sa iter::Walang laman idinagdag Magpadala at Mag-sync ng suporta para sa anumang mga halaga ng T.
    Pin ng Mga Tawag::{map_unchecked, map_unchecked_mut} naihatid mula sa pagkakaroon ng pagbabalik ng isang uri ng halaga para sa "Sized" na pagpapatupad.
    Sa io::Cursor ipinatupad PartialEq at Eq. Tinutukoy ng attribute na "const" ang posibilidad ng paggamit sa anumang konteksto sa halip na mga constant, inilapat para sa Layout::new method.

  • Isang bagong bahagi ng API ang inilipat sa stable na kategorya, kabilang ang na-stabilize na CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut and ptr::slice_from_raw_parts.

  • Ang Error::description method ay hindi na ginagamit.
  • Nagbigay ng pangalawang antas ng suporta para sa armv7a-none-eabi at riscv64gc-unknown-linux-gnu platform. Ang suporta para sa karaniwang library para sa riscv64gc-unknown-linux-gnu platform ay ibinigay.
    Apple 32-bit na mga platform ibinaba hanggang sa ikatlong antas ng suporta, na nagpapahiwatig ng pangunahing suporta, ngunit walang awtomatikong pagsubok at paglalathala ng mga opisyal na build. Ang pag-downgrade sa suporta ay dahil sa hindi na sinusuportahan ng Apple ang mga 32-bit na platform.

Pinagmulan: opennet.ru

Magdagdag ng komento