Puo ea Rust programming 1.40 tokollo

e hatisitsoeng tokollo ea puo ea lenaneo la sistimi Mafome 1.40, e thehiloeng ke morero oa Mozilla. Puo e shebana le polokeho ea mohopolo, e fana ka taolo ea memori ea othomathike, hape e fana ka lisebelisoa tsa ho fihlela ts'ebetso e phahameng ea ts'ebetso ntle le ho sebelisa pokello ea lithōle le nako ea nako.

Taolo ea memori ea othomathike ea Rust e lokolla moqapi ho tsoa manolong a pointer le ho sireletsa khahlano le mathata a bakoang ke ho qhekella ha memori ea boemo bo tlase, joalo ka phihlello ea memori e sa lefelloeng, litšupiso tsa null pointer, buffer overruns, joalo-joalo. Motsamaisi oa liphutheloana o ntse a ntlafatsoa ho aba lilaebrari, ho netefatsa ho bokelloa le ho laola litšepe ka morero. thepa, ho u lumella ho fumana lilaebrari tse hlokahalang bakeng sa lenaneo ka ho tobetsa hanngoe feela. Sebaka sa polokelo se tšehetsoa ho amohela lilaebrari crates.io.

ka sehloohong boiqapelo:

  • E ekelitse bokhoni ba ho tšoaea meaho (sebopeho) le lipalo (enum le Variant block) u sebelisa tšobotsi "#[ha e feletse]", e leng e lumella nakong e tlang, eketsa likarolo tse ncha le likhetho ho meaho le lipalo tse phatlalalitsoeng. Mohlala, baetsi ba limmojule tse nang le meaho e nang le likarolo tse phatlalalitsoeng phatlalatsa ba ka sebelisa "#[non_exhaustive]" ho tšoaea meaho e ka bang le likarolo tse ncha tse eketsoang nakong e tlang. Ho fihlela joale, boemong bona, moqapi o ile a qobelloa ho khetha pakeng tsa ho phatlalatsa masimo ka lekunutu le ho tlama lenane le ke keng la fetoha la masimo. Tšobotsi e ncha e tlosa moeli ona mme e u lumella ho eketsa masimo a macha nakong e tlang ntle le kotsi ea ho senya khoutu ea kantle e neng e hlophisitsoe pele. Ka har'a liphutheloana tsa li-crate, ha u bapisa likhetho karolong ea "match", tlhaloso e hlakileng ea mask "_ => {...}" e hlokeha, e koahelang masimo a ka bang teng nakong e tlang, ho seng joalo phoso e tla bontšoa ha u eketsa masimo a macha.
  • E kentsoe bokhoni ba ho bitsa procedural macro mac!() moelelong oa mofuta. Mohlala, joale u ka ngola "type Foo = expand_to_type!(bar);" haeba "expand_to_type" e le mokhoa o moholo oa tsamaiso.
  • Ka har'a li-blocks tsa "ka ntle { ... }". eketsoe bokhoni ba ho sebelisa li-macros tsa procedural le attribute, ho kenyeletsoa "bang!()" macros, mohlala:

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

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

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

  • Ka macros kenngwa tshebetsong bokhoni ba ho hlahisa likarolo tsa "macro_rules!". Ho hlahisa "macro_rules!" ho khoneha ka bobeli ho li-macros tse kang ts'ebetso ("mac!()") le ho macros ka mokhoa oa litšobotsi ("#[mac]").
  • Karolong ea $m:meta ea 'mapa eketsoe ts'ehetso bakeng sa lipalo tse sa reroang tsa token ​​("[TOKEN_STREAM]", "{TOKEN_STREAM}" le "(TOKEN_STREAM)"), mohlala:

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

  • Ka mokhoa oa Rust 2015, tlhahiso ea phoso e fuoa monyetla bakeng sa mathata a khetholloang ha ho hlahlojoa ho alingoa ha mefuta e fapaneng (chelete ea ho alima) ho sebelisa mokhoa oa NLL (Non-Lexical Lifetimes). Pejana, litemoso li ile tsa nkeloa sebaka ke liphoso ha li sebetsa ka mokhoa oa Rust 2018.
    Ka mor'a hore phetoho e eketsehe ho mokhoa oa Rust 2015, bahlahisi ba ile ba khona ho qetella tlosa ho tsoa ho cheki ea khale ea ho alima.

    A re hopoleng hore mokhoa oa ho netefatsa o thehiloeng holim'a mochine o mocha oa ho ela hloko bophelo bohle ba mefuta e alimiloeng e entse hore ho khonehe ho khetholla mathata a mang a sa kang a hlokomeloa ke khoutu ea khale ea ho netefatsa. Kaha phoso e hlahisoang bakeng sa licheke tse joalo e ka ama ho lumellana le khoutu e neng e sebetsa pele, litemoso li ile tsa ntšoa qalong ho fapana le liphoso.

  • Sebopeho sa "const", se khethollang monyetla oa ho se sebelisa boemong leha e le bofe ho e-na le li-constants, se sebelisetsoa is_power_of_two function (bakeng sa linomoro tse sa ngolisoang).
  • Karolo e ncha ea API e isitsoe sehlopheng se tsitsitseng, ho kenyelletsa le todo!() macro le selae::repeat, mem::take, BtreeMap::get_key_value, HashMap::get_key_value, mekhoa e tsitsitsoe.
    Khetho::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}::from_be_bytes, {f64,f32}::from_le_bytes, le {f64,f32}::from_ne_bytes.

  • Ka har'a sephutheloana mookameli oa thepa
    kenngwa tshebetsong litemoso tsa caching compiler ho disk. E kentse khetho ea "metadata ea thepa" ho taelo ea "cargo metadata".--sefa-sethala" ho bonts'a feela liphutheloana tse tlamelletsoeng sethaleng se boletsoeng ka har'a kholomo ea qeto ea ho itšetleha. E kentse khetho ea tlhophiso ea http.ssl-version ho hlalosa mefuta e nepahetseng ea TLS.
    E kentse bokhoni ba ho phatlalatsa karolo "dev-e itšetlehileng ka eona" ntle le ho hlakisa senotlolo sa "version".

  • Rustc compiler e fana ka ts'ehetso ea boemo ba boraro bakeng sa liforomo tse hlalositsoeng thumbv7neon-unknown-linux-musleabihf, aarch64-e sa tsejoeng-none-softfloat, mips64-unknown-linux-muslabi64 le mips64el-e sa tsejoeng-linux-muslabi64. Boemo ba boraro bo kenyelletsa tšehetso ea mantlha, empa ntle le tlhahlobo e ikemetseng le phatlalatso ea meaho ea semmuso.

Source: opennet.ru

Eketsa ka tlhaloso