Izdanje Rust 1.87

Ob dnevu praznovanja desete obletnice izdaje programskega jezika Rust 1.0 (projekt Rust je bil osnovan leta 2006, izdaja 0.1 je bila oblikovana leta 2012, prva stabilna različica pa je bila predlagana leta 2015) je bila objavljena različica Rust 1.87. Jezik se osredotoča na varno upravljanje z pomnilnikom in ponuja sredstva za dosego visoke sočasnosti izvajanja nalog, pri čemer se izogne uporabi zbiralnika odpadkov in runtime-a (runtime se zmanjša na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Metode upravljanja memorijom u Rust-u oslobađaju developere od grešaka pri manipulaciji pokazivačima i štite od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskim područjima nakon njihova oslobađanja, dereferenciranje null pokazivača, izlazak izvan granica bafera, itd. Za distribuciju biblioteka, omogućavanje gradnje i upravljanje ovisnostima razvija se paket menadžer Cargo. Za hostovanje biblioteka podržava se repozitorij crates.io.

Sigurno upravljanje memorijom u Rust-u osigurano je tokom kompajliranja pomoću provjere referenci, praćenja vlasništva nad objektima, uzimanja u obzir vremena života objekata (vidljivost) i procjene ispravnosti pristupa memoriji tokom izvršavanja koda. Rust takođe pruža sredstva za zaštitu od prelivanja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije korišćenja, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli kao podrazumijevano, te nudi jaku statičku tipizaciju za minimiziranje logičkih grešaka.

Glavne novosti:

  • Standardni knjižnici je dodana podpora za anonimne cevi (anonymous pipe). Za ustvarjanje anonimnih cevi je predlagana metoda std::io::pipe(), ki se lahko uporablja v kombinaciji s std::process::Command za obravnavo standardnih vhodnih in izhodnih tokov ter za združitev tokov stdout in stderr. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new("path/to/bin") // združitev stdout in stderr v en kanal .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Dovoljen je klic iz safe-kode večine vgrajenih funkcij (Intrinsics) std::arch. Sprememba se uporablja za vgrajene funkcije std::arch, ki so označene kot unsafe le zaradi vezave na določeno funkcionalnost, če je ta funkcionalnost omogočena. Na primer, _mm256_add_epi32 se lahko pokliče iz safe-kode, če aplikacija uporablja ‘#[target_feature(enable = "avx2")]’.
  • Iz blokov „asm!“ z asemberskim kodo je dovoljeno izvajati prehode na bloke s kodo v jeziku Rust, kar poenostavi razvoj nizkonivojske kode, na primer, izvedbo optimizacij v jedru ali organizacijo interakcije z opremo. Točka za prehod za asembersko ukaz „jmp“ se določi v makru „asm!“ z novim operandom „label“, ki vsebuje blokovno izraz s kodo v jeziku Rust. unsafe { asm!( "jmp {}", label { println!("Jumped from asm!"); } ); }
  • Dovoljeno je natančno določiti zajete splošne tipe in življenjske dobe v definicijah tipov z uporabo vrnjenih tipov impl Trait. trait Foo { fn method(&'a self) -> impl Sized; type Implicit1: Sized; fn method_desugared(&'a self) -> Self::Implicit1; fn precise(&'a self) -> impl Sized + use; type Implicit2: Sized; fn precise_desugared(&'a self) -> Self::Implicit2; }
  • У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
    • Vec::extract_if
    • vec::ExtractIf
    • LinkedList::extract_if
    • linked_list::ExtractIf
    • ::split_off
    • ::split_off_mut
    • ::split_off_first
    • ::split_off_first_mut
    • ::split_off_last
    • ::split_off_last_mut
    • String::extend_from_within
    • os_str::Display
    • OsString::display
    • OsStr::display
    • io::pipe
    • io::PipeReader
    • io::PipeWriter
    • impl From for OwnedHandle
    • impl From for OwnedHandle
    • impl From for Stdio
    • impl From for Stdio
    • impl From for OwnedFd
    • impl From for OwnedFd
    • Box<MaybeUninit>::write
    • impl TryFrom<Vec> for String
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • ::offset_from_unsigned
    • ::byte_offset_from_unsigned
    • NonNull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::cast_signed
    • NonZero::::cast_signed.
    • ::cast_unsigned.
    • NonZero::::cast_unsigned.
    • ::is_multiple_of
    • ::unbounded_shl
    • ::unbounded_shr
    • ::unbounded_shl
    • ::unbounded_shr
    • ::midpoint
    • ::from_utf8
    • ::from_utf8_mut
    • ::from_utf8_unchecked
    • ::from_utf8_unchecked_mut
  • Priznak „const“ primenjen u funkcijama:
    • core::str::from_utf8_mut
    • ::copy_from_slice
    • SocketAddr::set_ip
    • SocketAddr::set_port,
    • 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::as_bytes
    • String::len
    • String::is_empty
    • String::as_mut_str
    • String::as_mut_vec
    • Vec::as_ptr
    • Vec::as_slice
    • Vec::capacity
    • Vec::len
    • Vec::is_empty
    • Vec::as_mut_slice
    • Vec::as_mut_ptr
  • Drugi nivo podpore za ciljno platformo i586-pc-windows-msvc je bil odstranjen. Priporočamo uporabo platforme i686-pc-windows-msvc, ki se razlikuje po podpori za SSE2. Platforma i586-pc-windows-msvc ni več smiselna, saj Windows 10 zahteva podporo za SSE2, starejše različice sistema Windows v Rustu pa niso podprte.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster