Rust 1.63 programmēŔanas valodas izlaidums

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

Pievieno komentāru