Rust 1.40 Programming Language Tso tawm

luam tawm system programming lus tso tawm Xeb 1.40, nrhiav tau los ntawm Mozilla qhov project. Cov lus qhia txog kev nyab xeeb ntawm kev nco, muab kev tswj hwm kev nco tsis siv neeg, thiab muab cov cuab yeej rau kev ua tiav cov haujlwm siab sib luag yam tsis tas siv cov khoom khib nyiab thiab Runtime.

Rust qhov kev tswj hwm tsis siv neeg lub cim xeeb tso tawm tus tsim tawm los ntawm kev siv tus taw tes thiab tiv thaiv cov teeb meem tshwm sim los ntawm kev tswj hwm lub cim xeeb qis, xws li kev nkag mus rau lub cim xeeb tom qab tsis pub dawb, tsis muaj qhov taw qhia tsis zoo, tsis muaj kev cuam tshuam, thiab lwm yam. Tus neeg saib xyuas pob yog tsim los faib cov tsev qiv ntawv, xyuas kom muaj kev sib dhos thiab tswj cov kev vam meej los ntawm qhov project. cargo, tso cai rau koj kom tau txais cov tsev qiv ntawv xav tau rau qhov kev pab cuam hauv ib nias. Lub chaw khaws cia tau txais kev txhawb nqa rau cov tsev qiv ntawv crates.io.

ntsiab kev tsim kho tshiab:

  • Ntxiv lub peev xwm los kos cov qauv (struct) thiab suav (enum nrog Variant block) siv tus cwj pwm "#[tsis_exhaustive]", uas nws tso cai rau yav tom ntej, ntxiv cov teb tshiab thiab cov kev xaiv rau kev tshaj tawm cov qauv thiab cov lej. Piv txwv li, cov neeg tsim khoom ntawm cov qauv uas muaj cov qauv nrog cov chaw tshaj tawm tuaj yeem siv "#[non_exhaustive]" los kos cov qauv uas yuav muaj cov teb tshiab ntxiv rau yav tom ntej. Txog rau tam sim no, nyob rau hauv qhov xwm txheej no, tus tsim tawm raug yuam kom xaiv ntawm kev tshaj tawm thaj chaw ntiag tug thiab khi rau cov npe tsis hloov pauv ntawm thaj chaw. Tus cwj pwm tshiab tshem tawm qhov kev txwv no thiab tso cai rau koj ntxiv cov teb tshiab yav tom ntej yam tsis muaj kev pheej hmoo ntawm kev rhuav tshem yav dhau los tso ua ke sab nraud. Hauv cov pob crate, thaum sib piv cov kev xaiv hauv ntu "match", yuav tsum muaj lub ntsiab lus meej ntawm daim npog qhov ncauj "_ => {...}", suav nrog thaj chaw yav tom ntej, txwv tsis pub muaj qhov yuam kev yuav tshwm sim thaum ntxiv cov teb tshiab.
  • Ntxiv lub peev xwm hu rau tus txheej txheem macro mac!() hauv hom ntsiab lus. Piv txwv li, tam sim no koj tuaj yeem sau "hom Foo = expand_to_type!(bar);" yog "expand_to_type" yog qhov txheej txheem macro.
  • Hauv "extern { ... }" blocks ntxiv muaj peev xwm siv cov txheej txheem thiab attribute macro, suav nrog "bang!()" macro, piv txwv li:

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

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

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

  • Hauv macro ua raws muaj peev xwm los tsim "macro_rules!" cov ntsiab lus. Tsim "macro_rules!" ua tau ob qho tib si hauv kev ua haujlwm zoo li macro ("mac!()") thiab hauv macros hauv daim ntawv ntawm cov cwj pwm ("#[mac]").
  • Hauv $m: metamapping element ntxiv kev txhawb nqa rau tus nqi token arbitrary enumeration (β€œ[TOKEN_STREAM]”, β€œ{TOKEN_STREAM}” thiab β€œ(TOKEN_STREAM)”), piv txwv li:

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

  • Nyob rau hauv Rust 2015 hom, kev ua yuam kev tso tawm tau qhib rau cov teeb meem pom thaum kuaj xyuas qhov qiv ntawm qhov sib txawv (qhib checker) siv NLL (Non-Lexical Lifetimes) txheej txheem. Yav dhau los, cov lus ceeb toom tau hloov nrog qhov yuam kev thaum khiav hauv Rust 2018 hom.
    Tom qab qhov kev hloov pauv tau txuas ntxiv mus rau Rust 2015 hom, cov neeg tsim khoom muaj peev xwm kawg rhuav tshem los ntawm tus qub qiv nyiaj checker.

    Cia peb nco qab tias cov txheej txheem pov thawj raws li lub tswv yim tshiab rau kev coj mus rau hauv tus account lub neej ntawm cov qiv nyiaj hloov pauv tau ua rau nws muaj peev xwm txheeb xyuas qee qhov teeb meem uas tsis tau pom dua los ntawm cov ntawv pov thawj qub. Txij li qhov ua yuam kev tso tawm rau cov tshev no tuaj yeem cuam tshuam rau kev sib raug zoo nrog cov lej ua haujlwm yav dhau los, cov lus ceeb toom tau pib tshaj tawm tsis yog qhov yuam kev.

  • Qhov "const" tus cwj pwm, uas txiav txim siab qhov muaj peev xwm siv nws hauv ib qho ntsiab lus tsis tas li, yog siv rau is_power_of_two function (rau unsigned integers).
  • Ib feem tshiab ntawm API tau raug tsiv mus rau qeb ruaj khov, suav nrog todo!() macro thiab daim hlais::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, txoj hauv kev tau ruaj khov.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne32, f64}::from_be_bytes, {f32,f64}::from_le_bytes, thiab {f32,f64}::from_ne_bytes.

  • Nyob rau hauv lub pob neeg saib xyuas cargo
    ua raws caching compiler ceeb toom ntawm disk. Ntxiv qhov kev xaiv "cargo metadata" rau "cargo metadata" hais kom ua--filter-platform" los qhia tsuas yog pob khoom khi rau lub hom phiaj lub hom phiaj hauv kab kev daws teeb meem kev vam khom. Ntxiv http.ssl-version configuration xaiv los txhais TLS versions siv tau.
    Ntxiv lub peev xwm los luam tawm ntu "dev-dependencies"tsis hais qhov tseem ceeb "version".

  • Lub rustc compiler muab kev txhawb nqa qib thib peb rau lub hom phiaj platform thumbv7neon-tsis paub-linux-musleabihf, aarch64-tsis paub-tsis muaj-softfloat, mips64-tsis paub-linux-muslabi64 thiab mips64el-tsis paub-linux-muslabi64. Qib thib peb suav nrog kev txhawb nqa yooj yim, tab sis tsis muaj kev sim ntsuas thiab tshaj tawm cov kev tsim tawm.

Tau qhov twg los: opennet.ru

Ntxiv ib saib