UtgÄvan av Rust 1.87

PÄ dagen för firandet av tioÄrsjubileet av lanseringen av programmeringssprÄket Rust 1.0 (Rust-projektet startades 2006, version 0.1 skapades 2012 och den första stabila versionen föreslogs 2015) publicerades version 1.87 av Rust. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder medel för att uppnÄ hög parallellism i exekvering av uppgifter, utan att anvÀnda en skrÀparesurs och runtime (runtime begrÀnsas till grundlÀggande initialisering och underhÄll av standardbiblioteket).

Minneshanteringsmetoderna i Rust skyddar utvecklare frÄn att göra fel vid manipulering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minnesarbete, sÄsom att komma Ät minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, etc. För distribution av bibliotek, byggande och hantering av projektberoenden utvecklas paketförvaltaren Cargo. För lagring av bibliotek stöds ett repository pÄ crates.io.

SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga nyheter:

  • Den standardbiblioteket har lagts till stöd för anonyma kanaler (anonymous pipe). Metoden std::io::pipe() har föreslagits för att skapa anonyma kanaler och kan anvĂ€ndas tillsammans med std::process::Command för att hantera standard in- och utflöden, samt för att kombinera strömmarna stdout och stderr. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new(«path/to/bin») // kombinera stdout och stderr i en kanal .stdout(send.try_clone()?) .stderr(send) .spawn()?; let mut output = Vec::new(); recv.read_to_end(&mut output)?; assert!(command.wait()?.success());
  • Det Ă€r nu tillĂ„tet att anropa de flesta av de inbyggda funktionerna (Intrinsics) std::arch frĂ„n sĂ€kert kod. Ändringen gĂ€ller inbyggda funktioner i std::arch som endast Ă€r mĂ€rkta som osĂ€kra pĂ„ grund av kopplingen till specifik funktionalitet om denna funktionalitet Ă€r aktiverad. Till exempel, _mm256_add_epi32 kan anropas frĂ„n sĂ€ker kod om applikationen anvĂ€nder ‚#[target_feature(enable = «avx2»)]‘.
  • FrĂ„n blocken «asm!» med assemblerkod Ă€r det nu tillĂ„tet att övergĂ„ till block med kod i Rust, vilket förenklar utvecklingen av lĂ„gnivĂ„kod, till exempel implementering av optimeringar i kĂ€rnan eller organisering av interaktion med maskinvaran. Punkten för övergĂ„ng till assemblerkommandot «jmp» anges i makrot «asm!» med hjĂ€lp av den nya operanden «label», som innehĂ„ller ett blockuttryck med kod pĂ„ Rust. unsafe { asm!( «jmp {}», label { println!(«Jumped from asm!»); } ); }
  • Det Ă€r nu möjligt att exakt ange fĂ„ngade generiska typer och livslĂ€ngd i trait-definitioner med hjĂ€lp av Ă„tervĂ€ndande typer 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; }
  • En ny uppsĂ€ttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
    • 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
  • Indikatorn "const" har tillĂ€mpats i funktioner:
    • 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
  • Andra nivĂ„n av stöd för den riktade plattformen i586-pc-windows-msvc har tagits bort. Det rekommenderas att anvĂ€nda plattformen i686-pc-windows-msvc, som har stöd för SSE2-instruktioner. Plattformen i586-pc-windows-msvc har blivit meningslös, eftersom stöd för SSE2 krĂ€vs för Windows 10, och tidigare versioner av Windows stöds inte av Rust.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster