Rust 1.94-udgivelse. Eksperimentering med Rust i FreeBSD-kernen. Turso-database og VCAD i Rust

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

Tilføj en kommentar