Rust programming language release 2021 (1.56)

Ang paglabas ng system programming language na Rust 1.56, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng tangkilik ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Bilang karagdagan sa regular na numero ng bersyon, ang release ay may label din bilang Rust 2021 at minarkahan ang pag-stabilize ng mga pagbabagong iminungkahi sa nakalipas na tatlong taon. Ang Rust 2021 ay magsisilbi ring batayan para sa pagbuo ng tampok sa susunod na tatlong taon, katulad ng kung paano naging batayan ang paglabas ng Rust 2018 para sa pagbuo ng wika sa nakalipas na tatlong taon.

Upang mapanatili ang pagiging tugma, maaaring gamitin ng mga developer ang mga tag na "2015", "2018", at "2021" sa kanilang mga program upang i-link ang mga program sa mga slice ng estado ng wika na tumutugma sa mga napiling Rust na edisyon. Ang mga pagbabago ay ipinakilala sa hiwalay na mga pagbabago na hindi tugma at na-configure sa metadata ng mga pakete ng kargamento sa pamamagitan ng field na "edisyon" sa seksyong "[package]". Halimbawa, ang "2018" na edisyon ay may kasamang functionality na na-stabilize sa katapusan ng 2018 at sumasaklaw din sa lahat ng karagdagang pagbabago na hindi lumalabag sa compatibility. Kasama rin sa 2021 na edisyon ang mga feature sa compatibility breaking na iminungkahi sa kasalukuyang 1.56 na release at naaprubahan para sa pagpapatupad sa hinaharap. Bilang karagdagan sa wika mismo, isinasaalang-alang din ng mga editor ang estado ng mga tool at dokumentasyon.

Ang mga pangunahing incompatibilities na naayos sa Rust 2021 ay:

  • Paghiwalayin ang Pagkuha sa Mga Pagsasara - Ang mga pagsasara ay maaari na ngayong kumuha ng mga indibidwal na pangalan ng field sa halip na ang buong ID. Halimbawa, "|| Ang ax + 1" ay kukuha lamang ng "ax" sa halip na "a".
  • Ang IntoIterator trait para sa mga arrays: array.into_iter() ay nagbibigay-daan sa iyo na umulit sa mga elemento ng array ayon sa value sa halip na sa pamamagitan ng reference.
  • Ang pagproseso ng "|" na mga expression ay binago sa macro_rules (lohikal O operasyon) sa mga pattern - Ang ":pat" specifier sa mga tugma ay nirerespeto na ngayon ang mga pattern na "A | B".
  • Kasama sa manager ng cargo package bilang default ang pangalawang bersyon ng feature resolver, ang suporta kung saan ipinakilala sa Rust 1.51.
  • Ang mga katangiang TryFrom, TryInto, at FromIterator ay idinagdag sa prelude standard na module ng library.
  • Ang panic!(..) at assert!(expr, ..) macros ngayon ay palaging gumagamit ng format_args!(..) para mag-format ng mga string, katulad ng println!().
  • Ang mga expression na ident#, ident"…" at ident'…' ay nakalaan sa syntax ng wika.
  • Ang mga babala ng bare_trait_objects at ellipsis_inclusive_range_patterns ay inilipat sa kategorya ng error.

Bago sa Rust 1.56:

  • Sa Cargo.toml, sa seksyong "[package]," idinagdag ang field na bersyon ng kalawang, kung saan matutukoy mo ang minimum na sinusuportahang bersyon ng Rust para sa package ng crate. Kung ang kasalukuyang bersyon ay hindi tumutugma sa tinukoy na parameter, ang Cargo ay mag-aabort nang may error.
  • Kapag tumutugma ang pattern gamit ang mga expression na "binding @ pattern," ibinibigay ang suporta para sa pagtukoy ng mga karagdagang binding (halimbawa, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Ang katangiang "const", na tumutukoy sa posibilidad na gamitin ito sa anumang konteksto sa halip na mga constant, ay ginagamit sa mga function.
    • std::mem::transmute
    • [T]::una
    • [T]::split_first
    • [T]::huling
    • [T]::split_last
  • Ang compiler ay inilipat upang gamitin ang bersyon 13 ng LLVM.
  • Ipinatupad ang level 64 na suporta para sa aarch32-apple-ios-sim platform at level XNUMX na suporta para sa powerpc-unknown-freebsd at riscvXNUMXimc-esp-espidf platform. Ang ikatlong antas ay nagpapahiwatig ng pangunahing suporta, ngunit walang awtomatikong pagsubok, ang pag-publish ng opisyal ay bumubuo at sinusuri ang kakayahang buuin ang code.

Alalahanin na ang Rust na wika ay nakatuon sa ligtas na pamamahala ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng isang paraan upang makamit ang mataas na paralelismo ng pagpapatupad ng trabaho, habang ginagawa nang hindi gumagamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang aklatan).

Ang awtomatikong pamamahala ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at pinoprotektahan laban sa mga problemang lumitaw dahil sa mababang antas ng pagmamanipula ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos itong mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.

Pinagmulan: opennet.ru

Magdagdag ng komento