Udgivelsen af programmeringssproget Rust 1.89, der blev udviklet af Mozilla, men nu videreudvikles under beskyttelse af den uafhængige, nonprofit organisation Rust Foundation. Sproget fokuserer på sikker hukommelsesstyring og tilbyder værktøjer til høj parallel udførelse af opgaver, uden brug af en garbage collector og runtime (runtime reduceres 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:
- Der er givet mulighed for at bruge symbolet «_» som argument for generiske parametre med mærket «const» til at udlede værdier af disse parametre baseret på den omgivende kontekst. pub fn all_false() -> [bool; LEN] { [false; _] }
- Der er tilføjet en ny lint-advarsel «mismatched_lifetime_syntaxes» for at løse problemet med uklar levetid i funktionssignaturer ved brug af mekanismen «lifetime elision» (som automatisk bestemmer levetiden for referencer, så man undgår manuel angivelse). Advarslen kontrollerer, at ind- og udparametre for funktionen tilhører den samme typegruppe. Grupperne dannes baseret på understøttelse af eksplicit angivelse af levetid og muligheder for automatisk at udlede levetiden af compileren (f.eks. i typerne «&’a T» og «ContainsLifetime» kan levetiden være nævnt eksplicit, men compileren kan ikke automatisk bestemme levetiden, mens i typerne «&T», «&’_ T» og «ContainsLifetime» både eksplicit angivelse og automatisk bestemmelse er tilladt).
- I attributen «target_feature» for x86-systemer er der implementeret en mulighed for at kontrollere understøttelsen af udvidede instruktioner sha512, sm3, sm4, kl og widekl, samt separate funktioner avx512. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Der er sikret, at doctest (tests integreret i dokumentationen) ikke kun kan køres for den nuværende målsystemplatform, men også for andre platforme angivet ved kørsel af pakkeadministratoren «cargo» («cargo test —doc —target other_target»).
- For funktionen ‘extern «C»‘, når der bygges til målsystemplatformen «wasm32-unknown-unknown», er der implementeret standard C ABI for WebAssembly.
- Med nogle forbehold vedrørende typernes kompatibilitet er det tilladt at bruge typerne i128 og u128 i eksterne C-funktioner (extern "C"), for hvilke der tidligere blev vist lint-advarslen "improper_ctypes_definitions".
- En ny batch af API'er er blevet klassificeret som stabile, herunder stabilisering af metoder og implementeringer af traits:
- Mange indbyggede funktioner (Intrinsics) til x86-processorer, herunder funktioner til AVX512, SHA512, SM3 og SM4.
- NonZero<char>
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
Flagget «const» anvendt i funktionerne:
- <[T; N]>::as_mut_slice
- <[u8]>::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Overgangen til den målrettede platform "x86_64-apple-darwin" er startet fra første supportsniveau til det andet (Apple planlægger at stoppe med at støtte x86_64-arkitekturen). Det første supportsniveau indebærer at skabe binære builds, udføre grundig testning og give den højeste støttegaranti for platformen — hver ændring i compileren undersøges ved at udføre et komplet testforløb. Det andet supportsniveau indebærer garanti for build, men uden garantier ved tests.
- Det tredje supportsniveau for platformene "loongarch32-unknown-none" og "loongarch32-unknown-none-softfloat" er blevet implementeret. Det tredje niveau indebærer grundlæggende støtte, men uden automatiseret testning, offentliggørelse af officielle builds og sikring af muligheden for at bygge koden.
Der kan desuden nævnes begivenheder og projekter relateret til Rust:
- Der er offentliggjort en rapport om tilstanden for Rust-pakker i Debian. Det bemærkes, at der i Debian Unstable (Sid) er cirka 8% af src-pakkerne i hovedrepoen relateret til byggedependerende som minimum med én pakke "librust-*". I Debian 12 var andelen 4,5%. Det er også bemærket, at over 3000 pakker inkluderer kode skrevet i Rust, der er udgivet i pakkerne librust-..-dev, og 150 src-pakker leverer kompilerede eksekverbare filer eller Rust-biblioteker.
Interessante Debian-pakker inkluderer sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d og fish. Valgfri Rust-understøttelse er implementeret i APT, QEMU (virtiofsd), Linux-kernen og Mesa, og den forventes også i LibreOffice. Et værktøj til at konvertere crate-pakker til Debian src-pakker er udviklet kaldet debcargo.
- Projektet tmux-rs, som udvikler en klon af terminalmultiplexer tmux (konsolvinduesmanager), der er genopbygget fra C til Rust, er præsenteret.
- Driver developer Tyr from Collabora has published an article about kernel-level devices for GPU drivers and the principles of developing such drivers in Rust.
- A universal application in Rust has been demonstrated, capable of running on both CPU and various GPU platforms: CUDA for NVIDIA, SPIR-V for Vulkan-supporting GPUs, Metal for Apple, DirectX 12 for Windows, WebGPU for browsers.
Kilde: opennet.ru
