Rust 1.66 Programming Language Release

Ang pagpapalabas ng Rust 1.66 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).

Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay 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.

Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.

Mga pangunahing inobasyon:

  • Sa mga enumerasyon na may mga integer na representasyon (ang attribute na "#[repr(Int)]"), ang tahasang indikasyon ng discriminant (variant number sa enumeration) ay pinapayagan, kahit na ang enumeration ay naglalaman ng mga field. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Idinagdag ang function core::hint::black_box na ibinabalik lamang ang natanggap na halaga. Dahil iniisip ng compiler na may ginagawa ang function na ito, maaaring gamitin ang black_box function para i-disable ang compiler optimizations para sa mga loop kapag nagsasagawa ng pagsubok sa performance ng code o kapag sinusuri ang nabuong machine code (upang hindi ituring ng compiler ang code na hindi nagamit at alisin ito). Halimbawa, sa halimbawa sa ibaba, pinipigilan ng black_box(v.as_ptr()) ang compiler na isipin na hindi ginagamit ang vector v. gumamit ng std::hint::black_box; fn push_cap(v: &mut Vec) { para sa i sa 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Ang "cargo" package manager ay nag-aalok ng "remove" command, na nagbibigay-daan sa iyong alisin ang mga dependency mula sa Cargo.toml manifest mula sa command line.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BtreeSet::{una, huli, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Magdagdag ng mga pagpapatupad ng AsFd para sa mga uri ng lock ng stdio kapag gumagamit ng WASI.
    • impl TryFrom > para sa Kahon<[T; N]>
    • core::hint::black_box
    • Tagal::try_from_secs_{f32,f64}
    • Pagpipilian::unzip
    • std::os::fd
  • Ang mga saklaw na "..X" at "..=X" ay pinapayagan sa mga template.
  • Kapag binubuo ang front end ng rustc compiler at ang LLVM backend, LTO (Link Time Optimization) at BOLT (Binary Optimization and Layout Tool) optimization modes ay ginagamit upang pataasin ang performance ng resultang code at bawasan ang memory consumption.
  • Ipinatupad ang ikatlong antas ng suporta para sa armv5te-none-eabi at thumbv5te-none-eabi 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.
  • Nagdagdag ng suporta para sa pag-link sa macOS Generic Libraries.

Bukod pa rito, mapapansin natin ang pagsasama sa GCC codebase ng front-end compiler ng Rust language (gccrs). Ang frontend ay kasama sa GCC 13 branch, na ipapalabas sa Mayo 2023. Simula sa GCC 13, ang karaniwang toolkit ng GCC ay magagamit upang i-compile ang mga programang Rust nang hindi kinakailangang i-install ang rustc compiler na binuo gamit ang mga pagpapaunlad ng LLVM. Ang pagpapatupad ng Rust sa GCC 13 ay nasa beta status, hindi naka-enable bilang default.

Pinagmulan: opennet.ru

Magdagdag ng komento