Rūsa 1.87 izlaista

Lai atzīmētu Rust 1.0 programmēšanas valodas desmito gadadienu (Rust projekts tika dibināts 2006. gadā, 0.1 versija tika izveidota 2012. gadā, bet pirmā stabilā versija tika piedāvāta 2015. gadā), ir izlaista Rust 1.87. Valoda koncentrējas uz atmiņas drošību un nodrošina līdzekļus uzdevumu izpildes augsta paralēlisma sasniegšanai, vienlaikus neizmantojot atkritumu savācēju un izpildlaiku (izpildlaiks ir samazināts līdz standarta bibliotēkas pamata inicializācijai 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:

  • Standarta bibliotēkai ir pievienots atbalsts anonīm caurulēm. Nenosauktu cauruļu izveidei ir paredzēta metode std::io::pipe(), ko var izmantot kombinācijā ar std::process::Command, lai apstrādātu standarta ievades un izvades plūsmas, kā arī apvienotu stdout un stderr plūsmas. izmantojiet std::process::Command; izmantojiet std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("ceļš/uz/bin") // apvieno stdout un stderr vienā kanālā .stdout(send.try_clone()?) .stderr(send) .spawn()?; ļaujiet mut izvadei = Vec::new(); recv.read_to_end(&mut izvade)?; apgalvot!(komanda.gaidīt()?.veiksmīgi());
  • Ir atļauts izsaukt lielāko daļu kompilatora iebūvēto std::arch funkciju (Intrinsics) no droša koda. Izmaiņas attiecas uz iebūvētajām std::arch funkcijām, kas ir atzīmētas kā nedrošas tikai tāpēc, ka tās ir saistītas ar konkrētu funkcionalitāti, ja šī funkcionalitāte ir iespējota. Piemēram, _mm256_add_epi32 var izsaukt no droša koda, ja lietojumprogramma izmanto '#[target_feature(enable = "avx2")]'.
  • No blokiem "asm!" Assemblera kodam ir atļauts atzaroties uz Rust koda blokiem, kas vienkāršo zema līmeņa koda izstrādi, piemēram, optimizāciju ieviešanu kodolā vai mijiedarbības ar aparatūru organizēšanu. Assemblera komandas "jmp" lēciena punkts ir norādīts makro "asm!". izmantojot jaunu operandu "etiķeti", kas satur bloka izteiksmi ar Rust kodu. nedrošs { asm!( "jump {}", label { println!("Pārlēkts no asm!"); } ); }
  • Iezīmju definīcijās ir atļauts skaidri norādīt tvertos vispārīgos tipus un dzīves ilgumus, izmantojot impl iezīmju atgriešanas tipus. traite Foo { fn metode<'a>(&'a self) -> impl Izmērs; tips Implicit1<'a>: Izmērs; fn method_desugared<'a>(&'a self) -> Self::Implicit1<'a>; fn precīzs<'a>(&'a self) -> impl Izmērs + lietošana ; tips Implicit2: Izmērs; fn precise_desugared<'a>(&'a self) -> Self::Implicit2; }
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
    • Vec::extract_if
    • vec::ExtractIf
    • Saistītais saraksts::izvilkums_ja
    • linked_list::IzvilktJa
    • <[T]>::atdalīšana
    • <[T]>::atdalīt_izslēgt_mutāciju
    • <[T]>::split_off_first
    • <[T]>::split_off_first_mut
    • <[T]>::pēdējā_atdalīšana
    • <[T]>::atdalīt_pēdējo_mutāciju
    • String::extend_from_within
    • os_str::Displejs
    • OsString::displejs
    • OsStr::displejs
    • io::pipe
    • io::PipeReader
    • io::PipeWriter
    • impl No priekš OwnedHandle
    • impl No priekš OwnedHandle
    • impl No Stdio
    • impl No Stdio
    • impl No OwnedFd
    • impl No OwnedFd
    • Kaste >::rakstīt
    • impl Izmēģiniet no > virknei
    • <*const T>::offset_from_unsigned
    • <*const T>::baitu_nobīde_no_neparakstīta
    • <*mut T>::offset_from_unsigned
    • <*mut T>::baitu_nobīde_no_neparakstīta
    • NonNull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::cast_signed
    • Nav nulle:: ::parakstīts_cast.
    • ::cast_unsigned.
    • Nav nulle:: ::cast_unsigned.
    • ::ir_vairāki_no
    • ::neierobežots_shl
    • ::neierobežots_shr
    • ::neierobežots_shl
    • ::neierobežots_shr
    • ::viduspunkts
    • ::from_utf8
    • ::from_utf8_mut
    • ::from_utf8_neatzīmēts
    • ::from_utf8_unchecked_mut
  • Zīme “const” tiek izmantota funkcijās:
    • kodols::str::from_utf8_mut
    • <[T]>::kopija_no_šķēles
    • LigzdasAdrese::iestatīt_ip
    • LigzdasAdrese::iestatīt_portu,
    • SocketAddrV4::set_ip
    • SocketAddrV4::set_port,
    • SocketAddrV6::set_ip
    • SocketAddrV6::set_port
    • SocketAddrV6::set_flowinfo
    • SocketAddrV6::set_scope_id
    • char::is_digit
    • char::is_whitespace
    • <N::as_flattened
    • <N::as_flattened_mut
    • String::into_bytes
    • String::as_str
    • String::capacity
    • String::kā_baiti
    • String::len
    • String::is_empty
    • String::as_mut_str
    • Stīga::as_mut_vec
    • Vec::as_ptr
    • Vec::as_slice
    • Vec::kapacitāte
    • Vec::len
    • Vec::is_empty
    • Vec::as_mut_slice
    • Vec::as_mut_ptr
  • Otrais atbalsta līmenis mērķa platformai i586-pc-windows-msvc ir noņemts. Ieteicams izmantot platformu i686-pc-windows-msvc, kas atbalsta SSE2 instrukcijas. Platforma i586-pc-windows-msvc vairs nav noderīga, jo Windows 10 Nepieciešams SSE2 atbalsts, un ir pieejamas arī agrākas versijas. Windows netiek atbalstīti Rust.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster