Rust programming language release 2021 (1.56)

Ang pagpagawas sa sistema sa programming language nga Rust 1.56, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Dugang sa regular nga numero sa bersyon, ang pagpagawas gimarkahan usab nga Rust 2021 ug nagtimaan sa pagpalig-on sa mga pagbag-o nga gisugyot sa miaging tulo ka tuig. Ang Rust 2021 magsilbi usab nga basehan sa mga feature build sa sunod nga tulo ka tuig, susama sa kung giunsa nga ang Rust 2018 nga pagpagawas nahimong basihan sa pagpalambo sa pinulongan sa miaging tulo ka tuig.

Aron mapadayon ang pagkaangay, mahimong gamiton sa mga developer ang "2015", "2018", ug "2021" nga mga tag sa ilang mga programa aron i-link ang mga programa sa mga hiwa sa estado sa pinulongan nga katumbas sa pinili nga Rust nga mga edisyon. Ang mga pagbag-o gipaila sa pagbulag sa dili magkatugma nga mga pagbag-o ug gi-configure sa metadata sa mga pakete sa kargamento pinaagi sa field nga "edisyon" sa seksyon nga "[package]". Pananglitan, ang "2018" nga edisyon naglakip sa pag-andar nga gi-stabilize sa katapusan sa 2018 ug gisakup usab ang tanan nga dugang nga mga pagbag-o nga wala makalapas sa pagkaangay. Ang 2021 nga edisyon dugang nga naglakip sa compatibility breaking features nga gisugyot sa kasamtangan nga 1.56 release ug gi-aprobahan para sa pagpatuman sa umaabot. Gawas pa sa pinulongan mismo, gikonsiderar usab sa mga editor ang kahimtang sa mga himan ug dokumentasyon.

Ang mga nag-unang incompatibilities nga gitakda sa Rust 2021 mao ang:

  • Separate Capture in Closures - Ang mga closure mahimo na nga makakuha sa indibidwal nga field name imbes sa tibuok ID. Pananglitan, "|| ax + 1" modakop lang sa "ax" imbes nga "a".
  • Ang IntoIterator nga kinaiya alang sa mga arrays: array.into_iter() nagtugot kanimo sa pag-uli sa mga elemento sa usa ka array pinaagi sa bili kay sa pinaagi sa reference.
  • Ang pagproseso sa "|" nga mga ekspresyon giusab sa macro_rules (lohikal O operasyon) sa mga pattern - Ang ":pat" specifier sa mga posporo karon nagtahod sa mga pattern "A | B".
  • Ang tagdumala sa pakete sa kargamento naglakip pinaagi sa default ang ikaduha nga bersyon sa feature solver, suporta nga gipaila sa Rust 1.51.
  • Ang mga kinaiya nga TryFrom, TryInto, ug FromIterator gidugang sa prelude standard library module.
  • Ang kalisang!(..) ug ipahayag!(expr, ..) nga mga macros karon kanunay nga naggamit sa format_args!(..) sa pag-format sa mga string, susama sa println!().
  • Ang mga ekspresyong ident#, ident"…" ug ident'…' gireserba sa syntax sa pinulongan.
  • Ang bare_trait_objects ug ellipsis_inclusive_range_patterns nga mga pasidaan gibalhin sa kategorya nga sayup.

Bag-o sa Rust 1.56:

  • Sa Cargo.toml, sa "[package]" nga seksyon, ang rust-version field gidugang, diin imong matino ang minimum nga gisuportahan nga bersyon sa Rust para sa crate package. Kung ang kasamtangan nga bersyon dili motakdo sa espesipikong parameter, ang Cargo mo-abort nga adunay sayup.
  • Kung ang pattern matching gamit ang "binding @ pattern" nga mga ekspresyon, ang suporta gihatag para sa pagtino sa dugang nga bindings (pananglitan, "let matrix @ Matrix {row_len, .. } = get_matrix();").
  • 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:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::kunhod_sa
    • String:: shrink_to
    • OsString:: shrink_to
    • PathBuf:: shrink_to
    • BinaryHeap::kunhod_sa
    • VecDeque::kunhod_sa
    • HashMap:: shrink_to
    • HashSet:: shrink_to
  • Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbis nga mga constant, gigamit sa mga gimbuhaton
    • std::mem::transmute
    • [T]::una
    • [T]::split_first
    • [T]:: katapusan
    • [T]::split_last
  • Ang compiler gibalhin sa paggamit sa LLVM nga bersyon 13.
  • Gipatuman ang level 64 nga suporta para sa aarch32-apple-ios-sim nga plataporma ug level XNUMX nga suporta para sa powerpc-unknown-freebsd ug riscvXNUMXimc-esp-espidf nga mga plataporma. Ang ikatulo nga lebel nagpasabot sa batakang suporta, apan walay automated nga pagsulay, ang pagmantala sa opisyal nagtukod ug nagsusi sa abilidad sa pagtukod sa code.

Hinumdomi nga ang Rust nga pinulongan nagpunting sa luwas nga pagdumala sa panumduman, naghatag og awtomatik nga pagdumala sa panumduman, ug naghatag og paagi aron makab-ot ang taas nga paralelismo sa pagpatuman sa trabaho, samtang nagbuhat nga walay paggamit sa usa ka tigkolekta sa basura ug runtime (runtime gikunhoran ngadto sa batakang pagsugod ug pagmintinar sa standard nga librarya).

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.

Source: opennet.ru

Idugang sa usa ka comment