De release van de programmeertaal Rust 1.97 is gepubliceerd, oorspronkelijk ontwikkeld door Mozilla, maar momenteel beheerd door de onafhankelijke non-profitorganisatie Rust Foundation. De taal richt zich op veilige geheugentoegang en biedt middelen voor een hoge mate van parallelle uitvoering, zonder gebruik te maken van een garbage collector en runtime (de runtime wordt beperkt tot basisinitialisatie en ondersteuning van de standaardbibliotheek).
De geheugenmethoden in Rust zijn gericht op het uitsluiten van fouten bij het manipuleren van pointers en het beschermen tegen problemen die voortkomen uit laagdrempelige geheugengebruik, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor de distributie van bibliotheken, het waarborgen van builds en het beheren van afhankelijkheden, wordt de package manager Cargo verder ontwikkeld. Voor het hosten 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:
- Standaard is er een nieuwe naamdecoratieschema (mangling) voor functies, globale variabelen en datastructuren in de gegenereerde object- en uitvoerbestanden ingeschakeld (-Csymbol-mangling-version=v0). Namen worden gedecoreerd om conflicten tijdens het linken van verschillende programma's te voorkomen, door specifieke context toe te voegen, zoals het pad naar de module en de naam van het crate-pakket.
Het eerder gebruikte naamdecoratieschema, gebaseerd op Itanium ABI, had nadelen zoals het vervangen van generieke parameters door onleesbare hashes en het bestaan van delen van de compiler die Itanium ABI niet gebruikten, waardoor specifieke Rust-naamderegelaars moesten worden gebruikt. In Rust 1.97 is het standaardnaamdecoratieschema in gebruik, dat speciaal voor Rust is ontwikkeld en vrij is van de genoemde nadelen. Het oude schema zal in een van de volgende releases worden verwijderd.
- De pakketbeheerder cargo heeft de mogelijkheid om te beheren hoe de compiler reageert op waarschuwingen tijdens het bouwen. Er is een omgevingsvariabele CARGO_BUILD_WARNINGS toegevoegd, die drie waarden kan aannemen: warn (standaard) — waarschuwingen op het scherm weergeven; allow — waarschuwingen verbergen; deny — waarschuwingen behandelen als fouten die de bouw stoppen.
In eerdere versies moest je ‘-Dwarnings’ in RUSTFLAGS opgeven om de bouw te beëindigen na het weergeven van een waarschuwing, maar bij het wijzigen van RUSTFLAGS beschouwde de pakketbeheerder cargo de bouw als nieuw, negeerde de cache en herbouwde het hele project vanaf nul. Het verplaatsen van de instelling naar cargo elimineerde het wissen van de cache en de noodzaak voor een volledige recompilatie bij het wijzigen van de waarschuwingverwerkingmodus, en vereenvoudigde het inschakelen van de behandeling van waarschuwingen als fouten in continue integratiesystemen.
- Standaard zijn foutmeldingen die door de linker worden weergegeven, ingeschakeld tijdens de compilatie. Berichten worden weergegeven als waarschuwingen via de speciale lint-regel «linker_messages», die niet in de standaardgroep «warnings» zit. rustc filtert daarbij berichten die typische valse alarmen zijn of normaal gedrag vertonen, en laat waarschuwingen over die kunnen duiden op problemen, zoals waarschuwingen over verouderde opties en ongewenste instellingen. Voorheen werden linker-informatie alleen weergegeven bij een foutieve beëindiging; anders werden alle berichten verborgen. Om het oude gedrag te herstellen, kan in Cargo.toml worden toegevoegd: [lints.rust] linker_messages = «allow»
- Een nieuwe lading API's is gestabiliseerd, inclusief gestabiliseerde methoden en implementaties van traits:
- Standaard voor RepeatN
- Kopie voor ffi::FromBytesUntilNulError
- Send voor std::fs::File voor UEFI
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- De constante eigenschap is toegepast in de methode char::is_control.
Daarnaast kunnen de onlangs aangekondigde projecten en evenementen die verband houden met Rust worden vermeld:
- Het project zinnia ontwikkelt een modulaire Unix-achtige kernel, geschreven in de programmeertaal Rust en verspreid onder de GPLv2-licentie. De kernel ondersteunt POSIX-interfacés en enkele extensies van BSD en Linux, zoals epoll en timerfd. Er zijn stuurprogramma's voor DRM (Direct Rendering Manager) en evdev beschikbaar voor opmaak en organisatie van invoer. De geïmplementeerde functionaliteit is voldoende om de desktopomgeving Xfce te draaien met de X-server en compositor. de server Weston is gebaseerd op Wayland. Ondersteuning voor opstarten zowel in de QEMU-emulator als op echte hardware, zoals de ThinkPad E14 G7 laptop.
- De release van de communicatielibrary iroh 1.0 is gepresenteerd, die netwerkverbindingen tussen applicaties op verschillende hosts mogelijk maakt met verbinding via cryptografische sleutels, in plaats van IP-adressen (de sleutel die moet worden verbonden wordt gespecificeerd en iroh vindt de bijbehorende host en stelt een versleutelde verbinding tot stand met behulp van het QUIC-protocol). Waar mogelijk worden directe P2P-verbindingen tot stand gebracht, maar als dit niet mogelijk is, wordt er teruggevallen op het werken via relais, die ook worden gebruikt voor het detecteren van hosts op basis van sleutels. Het is mogelijk om een eigen relay te draaien of verbinding te maken met de openbaar ondersteunde relais van de gemeenschap.
Onder de geavanceerde functies: ondersteuning voor Multipath QUIC voor gelijktijdige pakketlevering via meerdere routes, de mogelijkheid om vanuit NAT te werken, een statische configuratiemodus voor verbinding met lokale apparaten zonder internettoegang, de mogelijkheid om te compileren naar WASM-intermediate code voor uitvoering in de browser, ondersteuning voor het maken van eigen transporten, bijvoorbeeld voor verbinding via Bluetooth, WiFi Aware of LoRa. De code is geschreven in Rust en wordt verspreid onder de licenties Apache-2.0 en MIT. Er zijn wrappers beschikbaar voor Python, Node.js, Kotlin en Swift.
- De auteur van het server-side JavaScript-platform Bun heeft een artikel gepubliceerd over het herschrijven van Bun van de programmeertaal Zig naar Rust, met behulp van het AI-model Claude Fable. Het is opgemerkt dat Bun 1.3.14 de laatste release op Zig zal zijn en dat de volgende versie Bun 1.4.0 al op Rust zal zijn. Uit de uitgevoerde tests blijkt dat de Rust-versie aanzienlijk minder geheugen verbruikt en 2-5% sneller is dan de Zig-versie. De bestandsgrootte van de uitvoerbare Rust-versie is met 20% verminderd.
Bron: opennet.ru
