Rust 1.73 programmēšanas valodas izlaidums

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

  • Noklusējuma programmas avāriju apstrādātāja (panikas) izdoto ziņojumu formāts ir pārveidots. Makro "panikas!" norādītais teksts tagad tiek parādīts atsevišķā rindā bez pēdiņām, padarot ziņojumu vieglāk lasāmu un novēršot neskaidrības, ja ir ligzdotas pēdiņas vai tās ir sadalītas vairākās rindās. fn main() { let file = "ferris.txt"; panika!("Ak, nē! {fails:?} nav atrasts!"); } Bija pavediens "galvenais" panikā no "ak nē! "ferris.txt" nav atrasts!', src/main.rs:3:5 Pavediens 'main' panikā pie src/main.rs:3:5: ak, nē! "ferris.txt" nav atrasts!

    Tika pārveidota arī to ziņojumu izvade, kas tiek rādīti, kad tiek aktivizēti makro “assert_eq” un “assert_ne”. fn main() { assert_eq!("🦀", "🐟", "feriss nav zivs"); } Bija pavediens 'galvenais' panikā no 'apgalvojums neizdevās: `(pa kreisi == pa labi)` pa kreisi: `"🦀"`, pa labi: `"🐟"`: Ferris nav zivs', src/main.rs: 2 :5 Thread 'main' panikā pie src/main.rs:2:5: apgalvojums `left == right` neizdevās: Ferris nav zivs pa kreisi: "🦀" pa labi: "🐟"

  • Saskaņā ar RFC 3184 ir pievienota iespēja tieši manipulēt ar pavedienu lokālajām (thread_local) LocalKey atmiņas atslēgām. > un LocalKey > izmantojot get(), set(), take() un aizstāt() metodes, nevis izmantojot "with(|inner| ...)" aizvēršanu, kas novērš nepieciešamību veikt papildu inicializācijas kodu noklusējuma vērtības, kas norādītas jauniem pavedieniem, izmantojot makro “thread_local!” pavediens_lokāls! { statiskas LIETAS: Šūna > = Šūna::jauns(Vec::jauns()); } fn f() { // bija LIETAS.ar(|i| i.set(vec![32, 1, 2])); // kļuva par LIETAS.set(vec![3, 1, 2]); // ... // tika ļauts v = THINGS.with(|i| i.take()); // kļuva let v: Vec = LIETAS.ņem(); }
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
    • Neparakstīts {integer}::div_ceil
    • Neparakstīts {integer}::next_multiple_of
    • Neparakstīts {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::get
    • LocalKey:: >::set
    • LocalKey:: >::ņem
    • LocalKey:: >::aizstāt
    • LocalKey:: >::ar_aizņemties
    • LocalKey:: >::ar_aizņemties_mut
    • LocalKey:: >::set
    • LocalKey:: >::ņem
    • LocalKey:: >::aizstāt
  • Atribūts "const", kas nosaka iespēju to izmantot jebkurā kontekstā konstantu vietā, tiek izmantots funkcijās:
    • rc::Vājš::jauns
    • sinhronizācija::Vājš::jauns
    • NonNull::as_ref
  • Kompilators nodrošina versijas informācijas ierakstīšanu sadaļā “.comment”, līdzīgi kā GCC un Clang.
  • Trešais atbalsta līmenis ir ieviests platformām aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl un x86_64-unknown-linux - oho. 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.
  • Ir ieviests otrais atbalsta līmenis mērķa platformai wasm32-wasi-preview1-threads. Otrais atbalsta līmenis ietver montāžas garantiju.

Avots: opennet.ru

Pievieno komentāru