Publikimi i gjuhës programuese Rust 1.66

Gjuha e programimit për qëllime të përgjithshme Rust 1.66, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Risitë kryesore:

  • Në numërimet me paraqitje të numrave të plotë (atributi “#[repr(Int)]”, lejohet tregimi i qartë i diskriminuesit (numri i opsionit në numërim), edhe nëse numërimi përmban fusha. #[repr(u8)] enum Foo { A(u8), # diskriminues 0 B(i8), # diskriminues 1 C(bool) = 42, # diskriminues 42 }
  • Funksioni i shtuar::hint::black_box, i cili thjesht kthen vlerën e marrë. Për shkak se përpiluesi beson se një funksion i caktuar bën një gjë specifike, funksioni black_box mund të përdoret për të çaktivizuar optimizimin e sytheve të përpiluesit kur kryen testimin e performancës së kodit ose kur shqyrton kodin e gjeneruar të makinës (në mënyrë që përpiluesi të mos e konsiderojë kodin të papërdorshëm dhe të heqë atë). Për shembull, në shembullin më poshtë, specifikimi black_box(v.as_ptr()) e pengon përpiluesin të supozojë se vektori v nuk është në përdorim. përdorni std::hint::black_box; fn push_cap(v: &mut Vec) {për i në 0..4 { v.shty(i); kutia e zezë (v.as_ptr()); } }
  • Menaxheri i paketave "cargo" ofron komandën "heq", e cila ju lejon të hiqni varësitë nga manifesti Cargo.toml nga linja e komandës.
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • 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::{first, fundit, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Shto implementime AsFd për llojet e bllokimit të stdio kur përdorni WASI.
    • impl TryFrom > për kutinë<[T; N]>
    • thelbi::hint::kuti_e zezë
    • Kohëzgjatja::try_from_secs_{f32,f64}
    • Opsioni:: unzip
    • std::os::fd
  • Përdorimi i intervaleve "..X" dhe "..=X" lejohet në shabllone.
  • Kur montoni pjesën e përparme të përpiluesit rustc dhe pjesën e pasme të LLVM, përdoren mënyrat e optimizimit LTO (Link Time Optimization) dhe BOLT (Binary Optimization and Layout Tool), të cilat lejojnë rritjen e performancës së kodit që rezulton dhe zvogëlimin e konsumit të kujtesës.
  • Niveli i tretë i mbështetjes është zbatuar për platformat armv5te-none-eabi dhe thumbv5te-none-eabi. Niveli i tretë përfshin mbështetjen bazë, por pa testim të automatizuar, publikim të ndërtimeve zyrtare ose kontrollim nëse kodi mund të ndërtohet.
  • Mbështetje e shtuar për lidhjen me bibliotekat universale të macOS.

Për më tepër, mund të vërejmë përfshirjen e pjesës së përparme të përpiluesit të gjuhës Rust (gccrs) në bazën e kodit GCC. Frontend përfshihet në degën GCC 13, e cila do të dalë në maj 2023. Duke filluar me GCC 13, mjetet vendase të GCC mund të përdoren për të përpiluar programe në gjuhën Rust pa pasur nevojë të instaloni përpiluesin rustc, të ndërtuar duke përdorur zhvillimet LLVM. Zbatimi i GCC 13 i Rust do të jetë një version beta, i pa aktivizuar si parazgjedhje.

Burimi: opennet.ru

Shto një koment