Rust 1.93 is uitgebracht. Projecten Rex, Fjall 3 en Arti 1.9.0

De release van de programmeertaal Rust 1.93 is gepubliceerd, oorspronkelijk ontwikkeld door Mozilla, maar tegenwoordig verder ontwikkeld onder de auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation. De taal richt zich op veilig geheugengebruik en biedt middelen voor hoge parallelisme bij de uitvoering van taken, zonder gebruik te maken van een garbage collector en runtime (runtime is beperkt tot 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 standaard C-bibliotheek Musl, die meegeleverd wordt met Rust en gebruikt wordt bij statische koppeling voor doelplatforms ‘*-linux-musl’ (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl, enz.) op systemen zonder Musl, is bijgewerkt naar versie 1.2.5. De minimaal ondersteunde versie van Musl bij dynamische koppeling is ook verhoogd naar release 1.2.5. Eerder werd versie Musl 1.2.3 in Rust gebruikt, die problemen had met de implementatie van de DNS-resolver. In versie Musl 1.2.4 is de mogelijkheid toegevoegd om een verzoek via TCP te verzenden in het geval van een mislukte oproep via UDP in de DNS-resolver, waardoor het probleem met het aanvragen van grote DNS-records is opgelost en de compatibiliteit is verbeterd met terugkerende DNS-servers die geen gedeeltelijke resultaten in afgekorte UDP-antwoorden ondersteunen. In versie Musl 1.2.5 is er verwerking van antwoorden met lange CNAME-sequenties in de DNS-resolver gerealiseerd en is het probleem opgelost waarbij sommige grote antwoorden die via TCP werden verzonden, werden weggegooid.
  • De standaardbibliotheek is herzien om problemen met re-entrant gedrag op te lossen bij gebruik in globale geheugentoewijzers, geschreven in Rust, de macro std::thread_local! en de functie std::thread::current, die leidde tot oneindige recursie. Om te voorkomen dat std::thread_local! en std::thread::current dezelfde toewijzer aanroepen bij het proberen om geheugen toe te wijzen, wordt nu direct gebruikgemaakt van het systeemmechanisme voor geheugentoewijzing.
  • Binnen blokken ‘asm!’ met assemblercode is het gebruik van de ‘cfg’-attributen toegestaan, wat bijvoorbeeld het mogelijk maakt om gebruik van uitgebreide CPU-instructiesets te beheersen in de context van afzonderlijke expressies binnen het asm-blok (voorheen konden ‘cfg’-attributen alleen voor het asm-blok als geheel worden ingesteld). asm!( // of global_asm! of naked_asm! “nop”, #[cfg(target_feature = “sse2”)] “nop”, // … #[cfg(target_feature = “sse2”)] a = const 123, // alleen gebruikt op sse2 );
  • Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
    • <[MaybeUninit]>::assume_init_drop
    • <[MaybeUninit]>::assume_init_ref
    • <[MaybeUninit]>::assume_init_mut
    • <[MaybeUninit]>::write_copy_of_slice
    • <[MaybeUninit]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • ::unchecked_neg
    • ::unchecked_shl
    • ::unchecked_shr
    • ::unchecked_shl
    • ::unchecked_shr
    • ::as_array
    • ::as_array_mut
    • ::as_array
    • ::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • De doeldplatform ‘riscv64a23-unknown-linux-gnu’ is naar het tweede ondersteuningsniveau overgezet, wat inhoudt dat er een garantie voor de bouw is, maar geen garanties bij het doorlopen van de testset.
    • Daarnaast zijn er enkele aan Rust gerelateerde projecten te vermelden:
  • Voor de Linux-kernel wordt het Rex-framework ontwikkeld, waarmee uitbreidingen voor de Linux-kernel in Rust kunnen worden gemaakt, die de functionaliteit van de kernel kunnen uitbreiden in plaats van eBPF. Rex biedt dezelfde veiligheidsgaranties als eBPF, maar maakt gebruik van de mogelijkheden van de programmeertaal Rust en een lichtgewicht runtime voor isolatie en veiligheid. Voor deze programma’s wordt geen verifier gebruikt en de programma’s worden in native code gecompileerd door de Rust-compiler.

In Rex-programma's is het gebruik van een subset van de Rust-taal toegestaan, die veiligheidsgaranties biedt. In de huidige staat worden 5 typen eBPF-programma's ondersteund: kprobe, perf_event, tracepoint, xdp en tc. Er is de mogelijkheid om hulpfuncties van eBPF aan te roepen, interactie te hebben met eBPF-mapstructuren, kernelbronnen te beheren, uitzonderingen te verwerken, en om bindings en abstracties boven kernelstructuren te gebruiken.

  • De release van Fjall 3 is beschikbaar, een embedded opslag geschreven in Rust, werkend met gegevens in het sleutel-waardeformaat. Gegevens worden opgeslagen in de vorm van een log met gebruik van een LSM-boom (Log-Structured-Merge), zoals in RocksDB, waarbij wijzigingen worden opgeslagen door gegevens aan het einde van het bestand toe te voegen. Voor toegang tot de database wordt een API in de stijl van BTreeMap aangeboden. Functies zoals namespaces, directe en omgekeerde zoekopdrachten op basis van bereik, ingebouwde compressie, serialiseerbare transacties, gescheiden opslag van sleutels en zeer grote waarden die eraan zijn gekoppeld, en automatische achtergrondondersteuning van de database worden ondersteund. De code is open onder de Apache 2.0-licentie.

    In Rex-programma's is het gebruik van een subset van de Rust-taal toegestaan, die veiligheidsgaranties biedt. In de huidige vorm worden 5 types programma's ondersteund eBPF: kprobe, perf_event, tracepoint, xdp en tc. Er is de mogelijkheid om hulpfuncties van eBPF aan te roepen, interactie te hebben met eBPF map-structuren, kernelbronnen te beheren, uitzonderingen te verwerken en omleidingen en abstracties boven kernelstructuren te gebruiken.

  • De release van Fjall 3 is beschikbaar, een op Rust geschreven ingebouwde opslagoplossing die werkt met gegevens in sleutel-waarde formaat. Gegevens worden opgeslagen in de vorm van een log met behulp van een LSM-boom (Log-Structured-Merge), zoals in RocksDB, waarbij wijzigingen worden vastgelegd door gegevens aan het einde van het bestand toe te voegen. Voor toegang tot de database wordt een API aangeboden in de stijl van BTreeMap. Functionaliteiten zoals naamruimten, directe en omgekeerde zoekopdrachten binnen bereik, ingebouwde compressie, serializeerbare transacties, gescheiden opslag van sleutels en gerelateerde zeer grote waarden, en automatisch achtergrondonderhoud van de database worden ondersteund. De code is open onder de Apache 2.0-licentie.
  • Het Tor-project heeft de release van Arti 1.9.0 gepubliceerd, een implementatie van het Tor-framework die is geschreven in Rust. Wanneer de Arti-code op een niveau komt dat deze de C-versie volledig kan vervangen, zijn de Tor-ontwikkelaars van plan om Arti de status van de belangrijkste Tor-implementatie te geven en geleidelijk het onderhoud van de C-implementatie stop te zetten. In de nieuwe versie is de functionaliteit voor relais en servers directory's (Directory Authority) verbeterd, de ondersteuning voor dynamisch toegewezen poorten (proxy.socks_listen = "auto") is verbeterd, en er is een experimentele API toegevoegd voor het beheer van sleutels voor onion-diensten.

Bron: opennet.ru

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