Rust 1.57 Programming Language Release

Ang pagpagawas sa sistema sa programming language nga Rust 1.57, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman, naghatag ug awtomatik nga pagdumala sa panumduman, ug naghatag ug mga paagi aron makab-ot ang taas nga paralelismo sa buluhaton nga walay paggamit ug tigkolekta sa basura o runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang awtomatik nga pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup kung nagmaniobra sa mga pointer ug nanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagmaniobra sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman pagkahuman na-freeze, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Panguna nga mga inobasyon:

  • Ang paggamit sa "panic!" macro na-stabilize. sa mga konteksto nga gihimo sa panahon sa paghugpong, sama sa "const fn" nga mga deklarasyon. Dugang pa, dugang sa paggamit sa "panic!" Ang mga deklarasyon sa const nagtugot sa paggamit sa "asert!" macro. ug uban pang mga standard library API. Ang pagpalig-on wala pa masakop ang tibuuk nga imprastraktura sa pag-format, mao nga sa karon nga porma ang "panic!" macro magamit lang sa static nga mga kuwerdas (panic!(β€œ...")) o sa usa ka interpolated value nga "&str" kung ilisan (panic!("{}", a)), nga kinahanglan limitado sa pag-ilis sa "{ }" nga walay formatting specifiers ug uban pang matang. Sa umaabot, ang pagpadapat sa mga macro sa kanunay nga konteksto mapalapad, apan ang napalig-on nga mga kapabilidad igo na aron mahimo ang pag-insister nga mga pagsusi sa yugto sa paghugpong: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Gitugotan sa tagdumala sa pakete sa Cargo ang paggamit sa mga profile nga adunay arbitraryong mga ngalan, dili limitado sa "dev", "pagpagawas", "pagsulay" ug "bench". Pananglitan, aron mahimo ang pag-optimize sa yugto sa pag-link (LTO) kung ang katapusan nga mga asembliya sa produkto nahimo, mahimo ka maghimo usa ka profile nga "produksyon" sa Cargo.toml ug idugang ang bandila nga "lto = true" niini. Bisan pa, kung gitakda ang imong kaugalingon nga mga profile, kinahanglan nimo nga ipiho ang usa ka naa na nga profile aron makapanunod sa mga default nga setting gikan niini. Ang panig-ingnan sa ubos nagmugna og "production" nga profile nga mokompleto sa "release" profile pinaagi sa paglakip sa "lto = true" nga bandila. Ang profile mismo gi-aktibo pinaagi sa pagtawag sa kargamento nga adunay kapilian nga "--profile production", ug ang mga artifact sa asembliya ibutang sa direktoryo nga "target / produksiyon". [profile.production] inherits = "pagpagawas" lto = tinuod
  • Ang paggamit sa try_reserve alang sa mga tipo sa Vec, String, HashMap, HashSet ug VecDeque gipalig-on, nga nagtugot kanimo sa pagreserba og luna nga daan alang sa usa ka piho nga gidaghanon sa mga elemento sa usa ka matang aron makunhuran ang frequency sa mga operasyon sa alokasyon sa memorya ug malikayan nahagsa atol sa operasyon tungod sa kakulang sa memorya.
  • Gitugotan ang pagpiho sa mga macro nga adunay mga kulot nga braces sa mga ekspresyon sama sa "m!{ .. }.method()" ug "m!{ .. }?".
  • Ang pagpatuman sa File::read_to_end ug read_to_string functions na-optimized.
  • Ang suporta alang sa detalye sa Unicode gi-update sa bersyon 14.0.
  • Gipalapdan ang gidaghanon sa mga gimbuhaton nga gimarkahan nga "#[kinahanglan_gamiton]" aron mag-isyu og pasidaan kung ang pagbalik nga kantidad wala panumbalinga, nga makatabang sa pag-ila sa mga sayup nga gipahinabo sa paghunahuna nga ang usa ka function magbag-o sa mga kantidad imbis nga magbalik usa ka bag-ong kantidad.
  • Gidugang ang eksperimento nga backend alang sa paghimo sa code gamit ang libgccjit.
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • mga koleksyon :: TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro:: is_available
    • Sugo::get_program
    • Sugo::get_args
    • Sugo::get_envs
    • Sugo::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Ang "const" nga hiyas, nga nagtino kung kini magamit sa bisan unsang konteksto imbes nga mga constant, gigamit sa function hint::unreachable_unchecked.
  • Ang ikatulo nga lebel sa suporta gipatuman para sa armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ug armv7a-kmc- solid_asp3-eabihf nga mga plataporma. Ang ikatulo nga lebel naglakip sa batakang suporta, apan walay automated nga pagsulay, pagmantala sa opisyal nga pagtukod, o pagsusi kon ang code mahimo bang matukod.

Source: opennet.ru

Idugang sa usa ka comment