PublicÄts vispÄrÄjas nozÄ«mes programmÄÅ”anas valodas Rust 1.63 izlaidums, kas dibinÄts ar Mozilla projektu, bet tagad izstrÄdÄts neatkarÄ«gÄs bezpeļÅas organizÄcijas Rust Foundation paspÄrnÄ. Valoda koncentrÄjas uz atmiÅas droŔību un nodroÅ”ina lÄ«dzekļus, lai sasniegtu augstu darba paralÄlismu, vienlaikus izvairoties no atkritumu savÄcÄja un izpildlaika izmantoÅ”anas (izpildlaiks tiek samazinÄts lÄ«dz standarta bibliotÄkas pamata inicializÄÅ”anai un uzturÄÅ”anai).
Rust atmiÅas apstrÄdes metodes pasargÄ izstrÄdÄtÄju no kļūdÄm, manipulÄjot ar rÄdÄ«tÄjiem, un aizsargÄ pret problÄmÄm, kas rodas zema lÄ«meÅa atmiÅas apstrÄdes dÄļ, piemÄram, piekļūŔana atmiÅas apgabalam pÄc tÄ atbrÄ«voÅ”anas, nulles rÄdÄ«tÄju atsauÄu atcelÅ”ana, bufera pÄrtÄriÅi utt. Lai izplatÄ«tu bibliotÄkas, nodroÅ”inÄtu bÅ«vÄjumus un pÄrvaldÄ«tu atkarÄ«bas, projekts izstrÄdÄ Cargo pakotÅu pÄrvaldnieku. Crates.io repozitorijs tiek atbalstÄ«ts bibliotÄku mitinÄÅ”anai.
AtmiÅas droŔība tiek nodroÅ”inÄta Rust kompilÄÅ”anas laikÄ, pÄrbaudot atsauces, sekojot lÄ«dzi objekta Ä«paÅ”umtiesÄ«bÄm, sekojot lÄ«dzi objektu kalpoÅ”anas laikam (tvÄrumam) un novÄrtÄjot atmiÅas piekļuves pareizÄ«bu koda izpildes laikÄ. RÅ«sa arÄ« nodroÅ”ina aizsardzÄ«bu pret veselu skaitļu pÄrpildīŔanu, pieprasa obligÄtu mainÄ«go vÄrtÄ«bu inicializÄciju pirms lietoÅ”anas, labÄk apstrÄdÄ kļūdas standarta bibliotÄkÄ, pÄc noklusÄjuma piemÄro nemainÄ«gu atsauÄu un mainÄ«go jÄdzienu, piedÄvÄ spÄcÄ«gu statisko rakstīŔanu, lai samazinÄtu loÄ£iskÄs kļūdas.
Galvenie jauninÄjumi:
- Pievienots std::thread::scope API, kas ļauj izveidot tvÄruma pavedienus. AtŔķirÄ«bÄ no iepriekÅ” pieejamajiem pavedieniem, jaunais std::thread::scope API ļauj pÄrsÅ«tÄ«t nestatiskus datus, savukÄrt pavedieniem, kas izveidoti, izmantojot klasisko std::thread::spawn API, bija jÄbÅ«t visiem nodotajiem argumentiem, un tos nevarÄja saÅemt. aizÅemtos mainÄ«gos. Std::thread::scope API nodroÅ”ina, ka visi raduÅ”ies pavedieni tiek pÄrtraukti pirms datu atgrieÅ”anas, nodroÅ”inot pietiekamu aizÅÄmuma mehÄnisma droŔību.
- Ir ierosinÄti jauni failu deskriptoru iesaiÅojuma veidi - BorrowedFd un OwnedFd, kas nodroÅ”ina aizÅÄmumu un Ä«paÅ”umtiesÄ«bas. Veidi ir apzÄ«mÄti ar "#[repr(caurspÄ«dÄ«gs)]", ļaujot tos tieÅ”i izmantot ÄrÄjos C saitÄs, ievÄrojot Ä«paÅ”umtiesÄ«bas.
- NodroÅ”ina iespÄju konstantu kontekstÄ izsaukt Condvar::new, Mutex::new un RwLock::new, lai izveidotu globÄlas statiskas Mutex, RwLock un Condvar vÄrtÄ«bas, neizmantojot lazy_static pakotnes.
- TÄdÄm funkcijÄm kÄ fn foo (vÄrtÄ«ba: T, f: impl Copy) ir atļauta sintakse, piemÄram, āfoo::ā. (32, 3)ā, skaidri norÄdot sugas veidu.
- Ir pabeigta pÄreja uz NLL (Non-Lexical Lifetimes) tehnikas izmantoÅ”anu, lai identificÄtu problÄmas ar mainÄ«go lielumu aizÅemÅ”anos. NLL izpildes plÅ«smas grafikÄ Åem vÄrÄ rÄdÄ«tÄju kopas lÄ«menÄ«, kas ļauj paaugstinÄt aizÅemÅ”anÄs mainÄ«go pÄrbaudes kvalitÄti (aizÅemÅ”anÄs pÄrbaudÄ«tÄjs) un ļauj izpildÄ«t dažu veidu pareizu kodu, izmantot kas iepriekÅ” izraisÄ«ja kļūdu. Atbalsts vecajam mehÄnismam, kas izmantoja leksiskÄ lÄ«meÅa mūža saistīŔanu, tagad ir pilnÄ«bÄ noÅemts no rustc, un jaunÄ NLL izmantoÅ”ana ir ieviesta visÄ garumÄ.
- Jauna API daļa ir pÄrvietota uz stabilo kategoriju, tostarp ir stabilizÄtas pazÄ«mju metodes un ievieÅ”anas:
- masīvs::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
- CeļŔ::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::AizÅemtsRokturis
Avots: opennet.ru
