Rust 1.63 Programming Language Release

Ang pagpapalabas ng Rust 1.63 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:

  • Idinagdag ang std::thread::scope API, na nagbibigay-daan sa iyong gumawa ng mga sakop na thread. Hindi tulad ng mga dati nang available na thread, ang bagong std::thread::scope API ay nagbibigay-daan sa pagpasa ng paghiram ng hindi static na data, samantalang ang mga thread na ginawa gamit ang classic na std::thread::spawn API ay kinakailangan upang pagmamay-ari ang lahat ng mga argumentong naipasa at hindi maaaring tumanggap mga hiram na variable. Tinitiyak ng std::thread::scope API na ang anumang mga spawned thread ay wawakasan bago ibalik ang data, na nagbibigay ng sapat na seguridad para sa mekanismo ng paghiram.
  • Ang mga bagong uri ng wrapper para sa mga deskriptor ng file ay iminungkahi - BorrowedFd at OwnedFd, na nagbibigay ng paghiram at pagmamay-ari. Ang mga uri ay minarkahan ng "#[repr(transparent)]", na nagbibigay-daan sa kanila na direktang magamit sa mga panlabas na C binding sa paraang may kamalayan sa pagmamay-ari.
  • Ibinigay ang kakayahang tumawag sa Condvar::new, Mutex::new at RwLock::new sa konteksto ng mga constants upang lumikha ng global static na Mutex, RwLock at Condvar values ​​nang hindi gumagamit ng lazy_static na mga pakete.
  • Para sa mga function tulad ng fn foo (value: T, f: impl Copy) ang syntax tulad ng “foo::” ay pinapayagan (32, 3)", tahasang nagpapahiwatig ng uri ng generic.
  • Nakumpleto na ang paglipat sa paggamit ng pamamaraang NLL (Non-Lexical Lifetimes) upang matukoy ang mga problema sa mga variable sa paghiram. Isinasaalang-alang ng NLL sa antas ng isang hanay ng mga pointer sa graph ng daloy ng pagpapatupad, na ginagawang posible upang madagdagan ang kalidad ng tseke para sa mga variable ng paghiram (borrow checker) at payagan ang pagpapatupad ng ilang mga uri ng tamang code, ang paggamit ng na dati ay humantong sa isang pagkakamali. Ang suporta para sa lumang mekanismo na gumamit ng lexical-level lifetime binding ay ganap na ngayong inalis mula sa rustc, at ang paggamit ng bagong NLL ay ipinatupad sa kabuuan.
  • Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
    • array::from_fn
    • Box::into_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Path::try_exists
    • Ref::filter_map
    • RefMut::filter_map
    • NonNull::<[T]>::len
    • ToOwned::clone_into
    • IPv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::BorrowedFd<'fd>
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::BorrowedHandle

      Pinagmulan: opennet.ru

Magdagdag ng komento