Programmeringssproget Rust 1.94, grundlagt af Mozilla-projektet, men nu udviklet under ledelse af den uafhængige non-profit organisation Rust Foundation, er blevet udgivet. Sproget fokuserer på hukommelsessikkerhed og leverer værktøjer til at opnå høj parallelitet i opgaveudførelsen, samtidig med at det undværer brugen af en garbage collector og runtime (runtime er reduceret til grundlæggende initialisering og vedligeholdelse af standardbiblioteket).
Rusts hukommelsesstyringsmetoder er designet til at eliminere fejl i pointermanipulation og beskytte mod problemer, der opstår fra lavniveau-hukommelsesstyring, såsom adgang til hukommelse efter den er blevet frigjort, dereferering af nullpointere, bufferoverløb osv. Projektet udvikler Cargo-pakkehåndteringen til at distribuere biblioteker, facilitere builds og administrere afhængigheder. crates.io-arkivet vedligeholdes til hosting af biblioteker.
Hukommelsessikkerhed er tilvejebragt i Rust på kompileringstidspunktet gennem referencekontrol, holde styr på objektejerskab, holde styr på objektlevetider (scopes) og vurdere rigtigheden af hukommelsesadgang under kodeudførelse. Rust giver også beskyttelse mod heltalsoverløb, kræver obligatorisk initialisering af variabelværdier før brug, håndterer fejl bedre i standardbiblioteket, anvender konceptet med uforanderlige referencer og variabler som standard, tilbyder stærk statisk skrivning for at minimere logiske fejl.
Vigtigste innovationer:
- Slice-typen har nu en array_windows-metode. Denne metode opretter en iterator til at gennemløbe slices i vinduer med fast størrelse, der flytter et element frem ad gangen. I modsætning til den tidligere tilgængelige windows-metode, opererer array_windows på en konstant vinduesstørrelse og returnerer en reference til et array med fast størrelse (&[T; N]) i stedet for et slice med udefineret størrelse (&[T]) for hver iteration. Da array-størrelsen oprindeligt er kendt af compileren, kan ydeevnen forbedres ved at undgå grænsekontrol i hvert iterationstrin. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- Cargo-pakkehåndteringens konfigurationsfiler (.cargo/config.toml) implementerer "include"-direktivet, som giver dig mulighed for at indsætte indholdet af andre filer på stedet. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- Understøttelse af den nye version af TOML 1.1-markupsproget er blevet tilføjet til manifest- og konfigurationsfiler. Denne nye version tilføjer understøttelse af integrerede tabeller med flere linjer, escape-sekvensen "\xHH" til indsættelse af hexadecimale byterepræsentationer og escape-sekvensen "\e" for "\u001B", samt muligheden for at efterlade et komma i slutningen af det sidste element og udelade sekunder i tidsværdier. serde = { version = "1.0", features = ["derive"] } kan nu erstattes med serde = { version = "1.0", features = ["derive"], }
- En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoder og implementeringer af egenskaber er blevet stabiliseret:
- <[T]>::array_windows
- <[T]>::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl PrøvFra til brug
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Intrinsiske kendetegn for x86 avx512fp16 instruktioner
- Intrinsiske træk ved AArch64 NEON fp16 instruktioner
- f32::konstanter::EULER_GAMMA
- f64::konstanter::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- "const" tegnet bruges i funktioner:
- f32::mul_add
- f64::mul_add
- Platformen riscv64im-unknown-none-elf er blevet flyttet til supportniveau 3. Supportniveau 3 inkluderer grundlæggende support, men inkluderer ikke automatiseret testning, officielle build-udgivelser eller build-verifikation.
Derudover vil vi gerne fremhæve nyligt annoncerede projekter og begivenheder relateret til Rust:
- Ayrton Muñoz, som implementerede understøttelse af Sony PlayStation 1-platformen i Rust-compileren og porterede FreeBSD til computere med Apple Silicon-chips, har implementeret muligheden for at skrive kernekomponenter og enhedsdrivere i Rust til FreeBSD. Et sæt KPI-bindinger (Kernel Programming Interface), der muliggør brugen af Rust-kode i FreeBSD-kernen, er blevet leveret til test, sammen med virtio-lyddriveren (virtio_snd), DockChannel HID-driveren til M2 MacBook-tastaturet og adskillige lavniveaudrivere til Mac-computerundersystemer på Apple Silicon-chips, alle oprettet ved hjælp af disse bindinger.
Arbejdet med Rust-bindingerne har været i gang siden slutningen af 2024. I øjeblikket implementerer bindingerne kun en del af C-KPI'erne og betragtes som ustabile, men over tid planlægger de at forbedre deres stabilitet, så den matcher en lignende grænseflade til C-sproget. Driveren virtio_snd, der er foreslået som et eksempel, er egnet til at afspille musik i QEMU. Det forventes, at Rust-bindingerne i 2026 vil være tilstrækkeligt stabile til, at interesserede udviklere kan begynde at bruge dem til at skrive kode.
- NetBSD-udvikleren Benny Siegert gav en begrundelse for, hvorfor Rust-understøttelse ikke vil blive vist i NetBSD-kernen: NetBSD understøtter arkitekturer, som Rust ikke er tilgængelig for; vedligeholdelse af den eksisterende Rust-værktøjskæde i pkgsrc er en betydelig indsats og understøttes kun af få udviklere; kerneunderstøttelse af Rust kræver, at Rust-compileren inkluderes i basissystemet; bootstrapping af Rust på NetBSD bruger en ældre binær pakke, hvilket er uacceptabelt for selvstændige distributioner, der distribueres som kildekode; Rusts udgivelsescyklusser er inkompatible med NetBSDs udviklings- og supportcyklusser for ældre grene (for eksempel understøttes NetBSD 9, udgivet i 2020, fortsat, hvilket ville kræve levering og support af en seks år gammel Rust-compiler).
- Turso 0.5, et indlejret databasehåndteringssystem (DBMS) skrevet i Rust og kompatibelt med SQLite på tværs af dets SQL-dialekt, databasefilformat og C API, er blevet udgivet. Forbedrede funktioner inkluderer en CDC (Change Data Capture) mekanisme til sporing af databaseændringer i realtid, brugen af io_uring til asynkron I/O på Linux, understøttelse af vektorsøgning, ALTER-sætningen til ændring af databaseskemaet, muligheden for at kryptere databasedata, en inkrementel beregningstilstand og "BEGIN CONCURRENT"-konstruktionen.
- Et projekt, der skal muliggøre brugen af Rust-standardbiblioteket i GPU-sidede programmer.
- Emuko er en RISC-V emulator skrevet i Rust, der kan starte Linux, understøtter JIT-kompilering og kan gemme og gendanne tilstandsbilleder.
- RustConn (flatpak) er en grafisk brugerflade til at administrere eksterne netværksforbindelser til andre værter, der understøtter SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust og SFTP. Koden er skrevet i Rust ved hjælp af GTK4 og Wayland.
- En ny gren af zlib-rs 0.6-projektet er blevet udgivet, hvilket markerer den som den første stabile version, der er fuldt kompatibel med zlib C API'en og egnet til en transparent erstatning for zlib. Projektet sigter mod at skabe et sikkert alternativ til zlib-datakomprimeringsbiblioteket. Udviklingen udføres med fokus på zlib-ng-projektet, som udvikler en højtydende variant af zlib.
- VCAD-projektet er en udvikling af et parametrisk computerstøttet design (CAD)-system skrevet i Rust og integreret med AI-agenter ved hjælp af MCP-protokollen. Det understøtter 3D-modellering, simulering, 2D-skitsering, komponentsamling, STEP-import og STL/GLB/STEP/DXF-eksport.
- Et talegenkendelsessystem skrevet i Rust, der bruger Mistral Voxtral Mini 4B Realtime AI-modellen og Burn-maskinlæringsframeworket, er blevet udgivet. Projektet fokuserer på talegenkendelse undervejs til livestreaming-transkription.
- c2rust 0.22-værktøjssættet er blevet udgivet. Det er designet til at oversætte C-kode (C99) til en usikker Rust-repræsentation, der i struktur ligner den originale C-kode. Det resulterende arbejdsframework kan bruges til gradvis migrering til idiomatisk Rust og fjernelse af usikre blokke.
Kilde: opennet.ru
