Udgivelse af Rust 1.87

På dagen for fejring af tiårsdagen for udgivelsen af programmeringssproget Rust 1.0 (Rust-projektet blev grundlagt i 2006, version 0.1 blev udgivet i 2012, og den første stabile version blev præsenteret i 2015) blev udgivelsen Rust 1.87 offentliggjort. Sproget fokuserer på sikker hukommelsesstyring og giver værktøjer til at opnå høj parallel udførelse af opgaver uden at bruge en garbage collector og et runtime (runtime begrænser sig til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).

Metoder til hukommelsesarbejde i Rust befrier udviklere fra fejl ved manipulation af pekere og beskytter mod problemer, der opstår ved lavniveau håndtering af hukommelse, såsom adgang til hukommelsesområder efter frigivelse, dereferering af nulpekere, buffer-overløb osv. For distribution af biblioteker, byggeprocesser og afhængighedsstyring udvikles pakkehåndteringssystemet Cargo. For opbevaring af biblioteker understøttes repository'et crates.io.

Sikker håndtering af hukommelse sikres i Rust under kompilering ved referencekontrol, sporing af ejerskab af objekter, hensyntagen til livstid af objekter (synlighed) og vurdering af korrekt adgang til hukommelse under kodeudførelse. Rust tilbyder også midler til beskyttelse mod heltals-overløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige (immutable) referencer og variabler som standard og tilbyder stærk statisk typisering for at minimere logiske fejl.

Hovednyhederne:

  • Den standardbiblioteket blev tilføjet støtte til anonyme kanaler (anonymous pipe). For at oprette anonyme kanaler er der foreslået en metode std::io::pipe(), som kan bruges sammen med std::process::Command til at behandle standard ind- og udgangsstrømme samt til at kombinere stdout- og stderr-strømme. use std::process::Command; use std::io::Read; let (mut recv, send) = std::io::pipe()?; let mut command = Command::new(«path/to/bin») // kombinerer stdout og stderr i én 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 tilladt at kalde de fleste indbyggede funktioner (Intrinsics) std::arch fra safe-kode. Ændringen gælder indbyggede funktioner std::arch, som kun er markeret som unsafe på grund af bindingen til en bestemt funktionalitet, hvis denne funktionalitet er aktiveret. For eksempel kan _mm256_add_epi32 kaldes fra safe-kode, hvis der i applikationen anvendes '#[target_feature(enable = «avx2»)]'.
  • Det er tilladt at springe fra blokke med 'asm!' til blokke med kode på Rust-sproget, hvilket forenkler udviklingen af lavniveau kode, såsom implementering af optimeringer i kernen eller organisering af interaktion med hardware. Springpunktet for assemblykommandoen 'jmp' angives i 'asm!' makroen ved hjælp af den nye operand 'label', som indeholder et blokudtryk med Rust-kode. unsafe { asm!( «jmp {}», label { println!(«Jumped from asm!»); } ); }
  • Det er tilladt at angive de indfangede generelle typer og levetider i trait-definitioner ved hjælp af de returnerede 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 batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af 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
  • Flagget «const» anvendt i funktionerne:
    • 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
  • Andet niveau af support for den målrettede platform i586-pc-windows-msvc er blevet fjernet. Det anbefales at bruge platformen i686-pc-windows-msvc, som adskiller sig ved at understøtte SSE2-instruktioner. Platformen i586-pc-windows-msvc har mistet sin relevans, da support for SSE2 er nødvendig for Windows 10, og tidligere versioner af Windows understøttes ikke i Rust.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster