Udgivelse af Rust 1.91

Der er udgivet en version af programmeringssproget Rust 1.91, som blev udviklet af Mozilla, men nu vedligeholdes af den uafhængige non-profit organisation Rust Foundation. Sproget fokuserer på sikker håndtering af hukommelse og tilbyder værktøjer til at opnå høj parallel udførelse af opgaver, uden at det kræver en garbage collector og runtime (runtime svækkes 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:

  • Understøttelsen af 64-bit ARM-systemer med Windows er forbedret. Målplatformen "aarch64-pc-windows-msvc" er blevet opgraderet fra andet til første niveau af støtte. Andet niveau af støtte er blevet sikret for arkitekturerne aarch64-pc-windows-gnullvm og x86_64-pc-windows-gnullvm. Første niveau af støtte involverer oprettelse af binære builds, udførelse af grundig testning og højeste garanti for platformstøtte — hver ændring i compileren testes ved hjælp af den komplette testsuite. Andet niveau af støtte inkluderer oprettelse af binære builds og garantier for build, men garanterer ikke beståelse af testsuiten. Tredje niveau omfatter grundlæggende støtte, men uden automatiseret testning, offentliggørelse af officielle builds og kontrol af byggekode.
  • Der er tilføjet lint-advarslen "dangling_pointers_from_locals" til at identificere returnering af hængende raw-pegere (dangling raw pointer), der peger på data gemt i lokale variabler defineret i den kaldte funktion. Sådanne variabler fjernes, når funktionen afsluttes, og raw-pegerne på de tilknyttede data bliver hængende, dvs. de peger på frigivet hukommelse. Efterfølgende dereferencering af en sådan peger fører til udefineret adfærd. fn f() -> *const u8 { let x = 0; &x // advarsel: en hængende peger vil blive produceret, fordi den lokale variabel «x» vil blive droppet }
  • Der er tilføjet lint-advarslen "integer_to_ptr_transmutes", som informerer om konvertering af hele tal til peger ved hjælp af funktionen std::mem::transmute.
  • I pakkemanageren Cargo er støtten for parameteren "build.build-dir" stabiliseret, hvilket definerer kataloget til opbevaring af midlertidige byggeartefakter, der genereres af cargo og rustc under byggefasen.
  • For ABI sysv64, win64, efiapi, and aapcs, support for declaring functions with a variable number of arguments in C style has been stabilized.
  • Support for inline assembly for the LoongArch32 architecture has been stabilized.
  • En ny batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af traits:
    • Path::file_prefix
    • AtomicPtr::fetch_ptr_add
    • AtomicPtr::fetch_ptr_sub
    • AtomicPtr::fetch_byte_add
    • AtomicPtr::fetch_byte_sub
    • AtomicPtr::fetch_or
    • AtomicPtr::fetch_and
    • AtomicPtr::fetch_xor
    • {integer}::strict_add
    • {integer}::strict_sub
    • {integer}::strict_mul
    • {integer}::strict_div
    • {integer}::strict_div_euclid
    • {integer}::strict_rem
    • {integer}::strict_rem_euclid
    • {integer}::strict_neg
    • {integer}::strict_shl
    • {integer}::strict_shr
    • {integer}::strict_pow
    • i{N}::strict_add_unsigned
    • i{N}::strict_sub_unsigned
    • i{N}::strict_abs
    • u{N}::strict_add_signed
    • u{N}::strict_sub_signed
    • PanicHookInfo::payload_as_str
    • core::iter::chain
    • u{N}::checked_signed_diff
    • core::array::repeat
    • PathBuf::add_extension
    • PathBuf::with_added_extension
    • Duration::from_mins
    • Duration::from_hours
    • impl PartialEq<str> for PathBuf
    • impl PartialEq<String> for PathBuf
    • impl PartialEq<str> for Path
    • impl PartialEq<String> for Path
    • impl PartialEq<PathBuf> for String
    • impl PartialEq<Path> for String
    • impl PartialEq<PathBuf> for str
    • impl PartialEq<Path> for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    • Cell::as_array_of_cells
    • u{N}::carrying_add
    • u{N}::borrowing_sub
    • u{N}::carrying_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl Debug for windows::ffi::EncodeWide<‘_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • impl Sum for Saturating<u{N}>
    • impl Sum<&Self> for Saturating<u{N}>
    • impl Product for Saturating<u{N}>
    • impl Product<&Self> for Saturating<u{N}>
  • Flagget «const» anvendt i funktionerne:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Compiler updated to LLVM 21 branch.

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