Rust 1.97, et programmeringssprog oprindeligt udviklet af Mozilla og nu videreudviklet under den uafhængige, nonprofitorganisation Rust Foundation, er blevet udgivet. Sproget fokuserer på sikker hukommelsesadministration og tilbyder værktøjer til at opnå høj grad af parallel udførelse af opgaver uden brug af affaldssamler og runtime (runtime begrænser sig til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).
Metoderne til hukommelseshåndtering i Rust har til formål at eliminere fejl i forbindelse med manipulation af pegepunkter og beskytte mod problemer der opstår ved lavniveau hukommelseshåndtering, såsom adgang til hukommelse efter den er frigivet, de-referering af nulpegepunkter, overskridelse af buffergrænser osv. For distribution af biblioteker, sikring af bygning og håndtering af projektafhængigheder, udvikles pakkehåndteringssystemet Cargo. For placering af biblioteker understøttes et repository på 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:
- Som standard er den nye dekoreringsskema (mangling) af navne for funktioner, globale variable og datatyper i de genererede objekt- og eksekverbare filer aktiveret (-Csymbol-mangling-version=v0). Navnene dekoreres for at undgå konflikter under linking af forskellige programmer ved at vedhæfte specifik kontekst, såsom modulets sti og navnet på crate-pakken.
Det tidligere anvendte dekoreringsskema for navne, baseret på Itanium ABI, havde ulemper såsom udskiftning af generisk variabelnavne med uforståelige hashes og dele af compileren, der ikke brugte Itanium ABI, hvilket krævede specifikke rust-dekodere af navne. I Rust 1.97 er der som standard aktiveret et dekoreringsskema, der er specielt udviklet til Rust og som er fri for de nævnte ulemper. Det gamle skema er planlagt til at blive fjernet i en af de kommende udgivelser.
- Pakkestyringssystemet cargo har fået indbygget mulighed for at styre reaktionen på kompileringsmæssige advarsler under bygning. Der er tilføjet en miljøvariabel CARGO_BUILD_WARNINGS, som kan tage tre værdier: warn (standard) — viser advarsler på skærmen; allow — skjuler advarslerne; deny — behandler advarsler som fejl, der stopper bygningen.
I tidligere versioner var det nødvendigt at angive '-Dwarnings' i RUSTFLAGS for compileren for at afslutte bygningen efter udskrift af en advarsel, men ved justering af RUSTFLAGS betragtede pakkestyringssystemet cargo bygningen som ny, ignorerede cachedataene og genopbyggede hele projektet fra bunden. Flytningen af indstillingen til cargo eliminerede behovet for at nulstille cachen og fuldstændig genkompilere ved ændring af advarselsbehandlingsmetoden og gjorde det lettere at aktivere behandling af advarsler som fejl i kontinuerlige integrationssystemer.
- Når der samles, er det som standard inkluderet visning af meddelelser, der leveres af linkeren. Meddelelserne vises som advarsler gennem en speciel lint-regel "linker_messages", som ikke er en del af den standard gruppe "warnings". Rustc filtrerer meddelelserne for dem, der er typiske falske positiver eller normal adfærd, og efterlader advarsler, der kan indikere problemer, såsom advarsler om forældede muligheder og uønskede indstillinger. Tidligere blev information fra linkeren kun vist, hvis der opstod en fejl, ellers blev alle meddelelser skjult. For at genskabe den tidligere adfærd kan der tilføjes følgende til Cargo.toml: [lints.rust] linker_messages = "allow"
- En ny batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af traits:
- Standard for RepeatN
- Kopier til ffi::FromBytesUntilNulError
- Send til std::fs::File for 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
- Attributten "const" anvendes i metoden char::is_control.
Der kan desuden nævnes nyligt annoncerede projekter og begivenheder relateret til Rust:
- Projektet zinnia udvikler en modulær Unix-lignende kerne, skrevet i Rust og distribueret under GPLv2-licensen. Kernen understøtter POSIX-interfaces og nogle udvidelser fra BSD og Linux, såsom epoll og timerfd. Drivere til DRM (Direct Rendering Manager) og evdev er til rådighed for rendering og inputorganisation. Den implementerede funktionalitet er tilstrækkelig til at køre skrivebordsmiljøet Xfce under X-server og komposit. server Weston baseret på Wayland. Der støttes opstart både i QEMU-emulatoren og på rigtigt hardware, såsom ThinkPad E14 G7 bærbare computer.
- Udgivelsen af kommunikationsbiblioteket iroh 1.0 er blevet præsenteret, hvilket muliggør oprettelse af netværksforbindelser mellem applikationer på forskellige værter ved hjælp af kryptografiske nøgler til tilslutning, i stedet for IP-adresser (angiver den nøgle, som der skal forbindes til, og iroh finder den relaterede vært og opretter en krypteret forbindelse ved hjælp af QUIC-protokollen). Direkte P2P-forbindelser forsøges, men hvis det ikke er muligt, falder den tilbage til at arbejde gennem relæer, som også anvendes til at opdage værter via nøgler. Det er muligt at køre sit eget relæ eller oprette forbindelse til offentlige relæer understøttet af fællesskabet.
Bland de avancerede funktioner: understøttelse af Multipath QUIC til samtidig levering af pakker over flere ruter, mulighed for at arbejde bag NAT, statisk konfigurationsmode til forbindelse til lokale enheder uden internetadgang, mulighed for at samle til mellemledskode WASM til udførelse i browseren, understøttelse af oprettelse af egne transportmidler, for eksempel til forbindelse via Bluetooth, WiFi Aware eller LoRa. Koden er skrevet i Rust og distribueres under licenserne Apache-2.0 og MIT. Bindings til Python, Node.js, Kotlin og Swift er tilgængelige.
- Forfatteren af serverplatformen til JavaScript, Bun, har offentliggjort en artikel, der analyserer projektet med at omskrive Bun fra Zig til Rust ved hjælp af AI-modellen Claude Fable. Det nævnes, at Bun 1.3.14 bliver den sidste udgave på Zig, og den næste version, Bun 1.4.0, allerede vil være på Rust. Ifølge de udførte tests forbruger versionen på Rust betydeligt mindre hukommelse og er 2-5% hurtigere end versionen på Zig. Størrelsen på eksekveringsfilen i versionen på Rust er blevet reduceret med 20%.
Kilde: opennet.ru
