Rust 1.91 vrijgegeven

De release van de programmeertaal Rust 1.91 is gepubliceerd, ontwikkeld door het Mozilla-project, maar nu beheerd door de onafhankelijke organisatie Rust Foundation. De taal richt zich op veilige geheugentoegang en biedt middelen om hoge paralleliteit bij het uitvoeren van taken te bereiken, zonder gebruik te maken van een garbage collector en runtime (de runtime bestaat uit basisinitialisatie en ondersteuning van de standaardbibliotheek).

Geheugenmethoden in Rust helpen ontwikkelaars om fouten bij het manipuleren van pointers te voorkomen en beschermen tegen problemen die voortkomen uit laag-niveau geheugenwerk, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor het verspreiden van bibliotheken, het garanderen van builds en het beheren van projectafhankelijkheden is er een pakketbeheerder genaamd Cargo ontwikkeld. Voor het plaatsen van bibliotheken wordt de repository crates.io ondersteund.

Veilige geheugenwerking in Rust wordt tijdens de compilatie gegarandeerd door middel van referentiecontrole, het bijhouden van eigenaarschap van objecten, het in acht nemen van de levensduur van objecten (scope) en het evalueren van toegangsrechten tot geheugen tijdens de uitvoering van code. Rust biedt ook middelen om integer-overflows te voorkomen, vereist dat waarden van variabelen voor gebruik worden geïnitialiseerd, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen als standaard toe en biedt sterke statische type-onderzoek voor het minimaliseren van logische fouten.

Belangrijkste vernieuwingen:

  • De ondersteuning voor 64-bit ARM-systemen met Windows is verbeterd. Het doelsysteem ‘aarch64-pc-windows-msvc’ is van niveau twee naar niveau één ondersteuning overgezet. Niveau twee ondersteuning is gegarandeerd voor de architecturen aarch64-pc-windows-gnullvm en x86_64-pc-windows-gnullvm. Niveau één ondersteuning houdt in dat er binaire builds worden gemaakt, uitgebreide tests worden uitgevoerd en de hoogste garantie voor platformondersteuning wordt gegeven — elke wijziging in de compiler wordt gecontroleerd met een volledige testset. Niveau twee ondersteuning omvat het maken van binaire builds en de garantie van de build, maar garandeert niet dat de testset wordt doorstaan. Niveau drie biedt basis ondersteuning, maar zonder geautomatiseerd testen, publicatie van officiële builds en controle van de mogelijkheid om code te bouwen.
  • Een lint-waarschuwing ‘dangling_pointers_from_locals’ is toegevoegd om het teruggeven door functies van hangende raw pointers te signaleren, die wijzen naar gegevens die worden opgeslagen in lokale variabelen die gedefinieerd zijn in de aangeroepen functie. Dergelijke variabelen worden verwijderd na afloop van de functie, en de raw pointers naar de bij deze variabelen behorende gegevens worden hangend, d.w.z. wijzen naar vrijgegeven geheugen. Het daaropvolgende derefereren van zo'n pointer leidt tot onbepaald gedrag. fn f() -> *const u8 { let x = 0; &x // waarschuwing: er zal een dangling pointer worden geproduceerd omdat de lokale variabele ‘x’ zal worden verwijderd }
  • Een lint-waarschuwing ‘integer_to_ptr_transmutes’ is toegevoegd, die waarschuwt voor het omzetten van gehele getallen naar pointers met behulp van de functie std::mem::transmute.
  • In de package manager Cargo is de ondersteuning voor de parameter ‘build.build-dir’ gestabiliseerd, die de directory bepaalt voor het opslaan van tijdelijke build-artifacten die door cargo en rustc tijdens het buildproces worden gemaakt.
  • Voor ABI sysv64, win64, efiapi en aapcs is de ondersteuning voor functie宣宣lomet behoorlijk gestabiliseerd met variabel aantal argumenten in C-stijl.
  • De ondersteuning van inline-assembler voor de LoongArch32-architectuur is gestabiliseerd.
  • Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van 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}>
  • De eigenschap "const" is toegepast in de functies:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • De compiler is bijgewerkt naar branch LLVM 21.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster