Rust 1.47 programmēšanas valodas izlaidums

Iznācis Mozilla projekta dibinātās Rust sistēmas programmēšanas valodas 1.47 izlaidums. Valoda koncentrējas uz atmiņas drošību, nodrošina automātisku atmiņas pārvaldību un nodrošina līdzekļus augsta uzdevumu paralēlisma sasniegšanai, neizmantojot atkritumu savācēju vai izpildlaiku (izpildlaiks tiek samazināts līdz standarta bibliotēkas pamata inicializēšanai un uzturēšanai).

Rust automātiskā atmiņas pārvaldība novērš kļūdas, manipulējot ar rādītājiem, un aizsargā pret problēmām, kas rodas no zema līmeņa atmiņas manipulācijām, piemēram, piekļuves atmiņas apgabalam pēc tā atbrīvošanas, nulles rādītāju novirzēm, bufera pārtēriņiem utt. Bibliotēku izplatīšanai, komplektēšanas nodrošināšanai un atkarību pārvaldībai projektā tiek izstrādāts Cargo pakotņu pārvaldnieks. Crates.io repozitorijs tiek atbalstīts bibliotēku mitināšanai.

Galvenie jauninājumi:

  • Ieviests atbalsts patvaļīga izmēra masīviem. Iepriekš, jo nevarēja definēt vispārīgas funkcijas visām veselu skaitļu vērtībām, standarta bibliotēka nodrošināja iebūvētu pazīmju atbalstu tikai masīviem, kuru lielums bija līdz 32 elementiem (katra izmēra pazīmes tika definētas statiski). Pateicoties const generics funkcionalitātes izveidei, kļuva iespējams definēt vispārīgas funkcijas jebkuram masīva izmēram, taču tās vēl nav iekļautas valodas stabilajās funkcijās, lai gan tās ir ieviestas kompilatorā un tagad tiek izmantotas standarta bibliotēkā. jebkura izmēra masīvu veidiem.
    Piemēram, šāda konstrukcija Rust 1.47 izdrukās masīva saturu, lai gan iepriekš tas būtu radījis kļūdu:

fn galvenais() {
lai xs = [0; 34];
println!("{:?}", xs);
}

  • Nodrošina īsāku pēdu izvadi (backtrace), izvadi ārkārtas situācijās. Elementi, kas vairumā situāciju neinteresē, bet pārblīvē izvadi un novērš uzmanību no galvenajiem problēmas cēloņiem, tiek izslēgti no izsekošanas. Lai atgrieztu pilnu izsekošanu, varat izmantot vides mainīgo "RUST_BACKTRACE=full". Piemēram, kodam

fn galvenais() {
panika!();
}

Iepriekš izsekojums tika izvadīts 23 posmos, bet tagad tas tiks samazināts līdz 3 posmiem, ļaujot uzreiz aptvert būtību:

pavediens "galvenais" panikā no "skaidras panika", src/main.rs:2:5
Stack backtrace:
0: std::panicking::begin_panic
vietnē /rustc/d…d75a/library/std/src/panicking.rs:497
1: rotaļu laukums::galvenais
vietnē ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
vietnē /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc kompilators ir atjaunināts, lai izveidotu, izmantojot LLVM 11 (Rust izmanto LLVM kā aizmuguri koda ģenerēšanai). Tajā pašā laikā tiek saglabāta iespēja veidot ar veco LLVM, līdz pat 8. versijai, bet pēc noklusējuma (rust-lang/llvm-project) tagad tiek izmantots LLVM 11. LLVM 11 izlaišana ir gaidāma tuvākajā laikā. dienas.
  • Windows platformā rustc kompilators nodrošina atbalstu, lai iespējotu kontroles plūsmas integritātes pārbaudes (Control Flow Guard), kas tiek aktivizētas, izmantojot karogu “-C control-flow-guard”. Citās platformās šis karogs pagaidām tiek ignorēts.
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp stabilizēta Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from. , f32:: TAU un f64::TAU.
  • Metodēs tiek izmantots atribūts “const”, kas nosaka iespēju to izmantot jebkurā kontekstā konstantu vietā:
    • jauns visiem veseliem skaitļiem, izņemot nulli;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub un saturating_mul visiem veseliem skaitļiem;
    • is_ascii_alphabetic, is_ascii_lielie burti, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace un is_ascii un_ucontrol veidi.
  • Attiecībā uz FreeBSD tiek izmantots FreeBSD 11.4 rīku komplekts (FreeBSD 10 neatbalsta LLVM 11).

Uzņemts no plkst opennet.ru

Avots: linux.org.ru

Pievieno komentāru