Rust 1.66 programmēšanas valodas izlaidums

Publicēts vispārējas nozīmes programmēšanas valodas Rust 1.66 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:

  • Uzskaitījumos ar veselu skaitļu attēlojumu (atribūts “#[repr(Int)]”) ir atļauta skaidra diskriminanta norāde (iespējas numurs uzskaitījumā), pat ja uzskaitījumā ir lauki. #[repr(u8)] enum Foo { A(u8), # diskriminants 0 B(i8), # diskriminants 1 C(bool) = 42, # diskriminants 42 }
  • Pievienota funkcija core::hint::black_box, kas vienkārši atgriež saņemto vērtību. Tā kā kompilators uzskata, ka dotā funkcija veic noteiktu darbību, funkciju black_box var izmantot, lai atspējotu kompilatora cilpu optimizāciju, veicot koda veiktspējas pārbaudi vai pārbaudot ģenerēto mašīnas kodu (lai kompilators neuzskatītu kodu par nelietojamu un noņemtu tas). Piemēram, zemāk esošajā piemērā, norādot black_box(v.as_ptr()), kompilators nevar pieņemt, ka vektors v netiek izmantots. izmantot std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Pakešu pārvaldnieks "cargo" piedāvā komandu "remove", kas ļauj noņemt atkarības no Cargo.toml manifesta no komandrindas.
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
    • 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, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Izmantojot WASI, pievienojiet AsFd implementācijas stdio bloķēšanas veidiem.
    • impl TryFrom> Box
    • kodols::hint::black_box
    • Ilgums::try_from_secs_{f32,f64}
    • Opcija:: unzip
    • std::os::fd
  • Veidnēs ir atļauts izmantot diapazonus “..X” un “..=X”.
  • Saliekot rustc kompilatora frontend un LLVM backend, tiek izmantoti optimizācijas režīmi LTO (Link Time Optimization) un BOLT (Binary Optimization and Layout Tool), kas ļauj palielināt iegūtā koda veiktspēju un samazināt atmiņas patēriņu.
  • Trešais atbalsta līmenis ir ieviests platformām armv5te-none-eabi un thumbv5te-none-eabi. Trešais līmenis ietver pamata atbalstu, taču bez automatizētas testēšanas, oficiālu būvējumu publicēšanas vai pārbaudes, vai kodu var izveidot.
  • Pievienots atbalsts saistīšanai ar macOS universālajām bibliotēkām.

Turklāt mēs varam atzīmēt Rust valodas kompilatora (gccrs) priekšpuses iekļaušanu GCC kodu bāzē. Priekšgals ir iekļauts GCC 13 filiālē, kas tiks izlaista 2023. gada maijā. Sākot ar GCC 13, vietējos GCC rīkus var izmantot, lai kompilētu programmas Rust valodā, bez nepieciešamības instalēt rustc kompilatoru, kas izveidots, izmantojot LLVM izstrādes. Rust GCC 13 ieviešana būs beta versija, kas nav iespējota pēc noklusējuma.

Avots: opennet.ru

Pievieno komentāru