Utgivelse av Rust 1.87

På dagen for feiringen av tiåret for lanseringen av programmeringsspråket Rust 1.0 (Rust-prosjektet ble grunnlagt i 2006, versjon 0.1 ble dannet i 2012, og den første stabile versjonen ble tilbudt i 2015) ble utgivelsen Rust 1.87 publisert. Språket fokuserer på sikker minnehåndtering og tilbyr midler for å oppnå høy parallellisme i oppgavekjøring, uten å bruke søppelsamler og runtime (runtime er begrenset til grunnleggende inicialisering og vedlikehold av standardbiblioteket).

Minnehåndteringsmetodene i Rust reduserer utviklerens risiko for feil ved manipulasjon av pekere og beskytter mot problemer som oppstår fra lavnivå minnehåndtering, som tilgang til minne etter frigjøring, dereferering av nullpekere, bufferoverløp osv. For distribusjon av biblioteker, bygging og avhengighetsstyring utvikles pakkebehandleren Cargo. For plassering av biblioteker støttes depotet crates.io.

Sikker minnehåndtering i Rust oppnås under kompilering gjennom referansesjekk, eierskapsoppfølging av objekter, livstidskontroll (omfang) og korrekt adgangsvurdering til minnet under programkjøring. Rust gir også verktøy for å beskytte mot heltallsoverflow, krever obligatorisk initialisering av variabler før bruk, håndterer feil bedre i standardbiblioteket, anvender konseptet med immutable referanser og variabler som standard, og tilbyr sterk statisk typisering for å minimere logiske feil.

Hovudnyhende:

  • Den standardbiblioteket har fått støtte for anonyme kanaler (anonymous pipe). For å opprette anonyme kanaler er det foreslått en metode std::io::pipe(), som kan brukes sammen med std::process::Command for å håndtere standard inn- og utdata, samt for å kombinere stdout- og stderr-strømmer. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new(«path/to/bin») // kombinere stdout og 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 er tillatt å kalle de fleste av de innebygde funksjonene (Intrinsics) i std::arch fra safe-kode. Endringen gjelder innebygde funksjoner i std::arch, som er merket unsafe kun på grunn av binding til spesifikk funksjonalitet, hvis denne funksjonaliteten er aktivert. For eksempel, _mm256_add_epi32 kan kalles fra safe-kode, hvis applikasjonen bruker ‘#[target_feature(enable = «avx2»)]’.
  • Fra blokker med «asm!» med assemblerkode er det tillatt å utføre overganger til blokker med kode på Rust, noe som forenkler utviklingen av lavnivåkode, for eksempel implementering av optimaliseringer i kjernen eller organisering av samhandling med maskinvare. Punktet for overgangen for assemblerkommandoen «jmp» spesifiseres i «asm!» makroen ved hjelp av den nye operanden «label», som inneholder blokkutsagn med kode på Rust. unsafe { asm!( «jmp {}», label { println!(«Jumped from asm!»); } ); }
  • Det er tillatt å spesifisere nøyaktige generiske typer og livstider i trait-definisjoner ved hjelp av tilbakeførte 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 gruppe API-er er blitt stabilisert, inkludert metoder og implementeringer av grensesnitt:
    • 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
  • Spesifikasjonen «const» er brukt i funksjoner:
    • 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
  • Det andre støttenivået for målplattformen i586-pc-windows-msvc er fjernet. Det anbefales å bruke plattformen i686-pc-windows-msvc, som har støtte for SSE2-instruksjoner. Plattforma i586-pc-windows-msvc har mistet sin relevans, ettersom Windows 10 krever støtte for SSE2, og tidligere versjoner av Windows støttes ikke i Rust.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster