Den nya versionen av programmeringssprÄket Rust 1.94 har publicerats. SprÄket, som grundades av Mozilla, utvecklas nu under vingen av den oberoende ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder verktyg för att uppnÄ hög parallellitet i uppgiftskörning, utan att anvÀnda en garbage collector eller runtime (runtime begrÀnsas till grundlÀggande initialisering och underhÄll av standardbiblioteket).
Minneshanteringsmetoderna i Rust syftar till att eliminera fel vid hantering av pekare och skydda mot problem som uppstÄr frÄn lÄg nivÄ minneshantering, sÄsom att referera till minnesomrÄden efter att de har frigjorts, dereferensiering av nullpekare, buffertöverskridningar, etc. För spridning av bibliotek, byggnation och hantering av beroenden utvecklas paketchefen Cargo. För att lagra bibliotek stöds ett repository pÄ crates.io.
SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga nyheter:
- I typen slice har metoden array_windows lagts till, som skapar en iterator för att gÄ igenom skivor (slice) med fasta storlekar som flyttas ett element i taget. Till skillnad frÄn den tidigare tillgÀngliga metoden windows, arbetar metoden array_windows med en konstant storlek pÄ fönstret och returnerar vid varje iteration en referens till en array av fast storlek (&[T; N]) istÀllet för en slice av obestÀmd storlek (&[T]). Eftersom storleken pÄ arrayen Àr kÀnd för kompilatorn finns möjligheten att undvika grÀnskontroller vid varje iterationssteg för att öka prestandan. 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());
- I konfigurationsfilerna för pakethanteraren Cargo (.cargo/config.toml) har en direktiv för âincludeâ implementerats, som tillĂ„ter att innehĂ„ll frĂ„n andra filer infogas pĂ„ plats. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- Stöd för den nya versionen av markup-sprĂ„ket TOML 1.1 har lagts till i manifestfiler och konfigurationsfiler, med stöd för flerradiga inbyggda tabeller, escape-sekvenser â\xHHâ för att infoga den hexadecimala representationen av bytes och â\eâ för att ersĂ€tta â\u001Bâ, samt möjligheten att ha ett kommatecken i slutet av det sista elementet och att hoppa över att ange sekunder i tidsvĂ€rden. serde = { version = "1.0", features = ["derive"] } kan nu ersĂ€ttas med serde = { version = "1.0", features = ["derive"], }
- En ny uppsÀttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Inbyggda funktioner för x86-instruktioner av typen av avx512fp16
- Inbyggda funktioner för AArch64-instruktioner av typen NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Indikatorn "const" har tillÀmpats i funktioner:
- f32::mul_add
- f64::mul_add
- Plattformen riscv64im-unknown-none-elf har uppnÄtt tredje supportnivÄ. Den tredje nivÄn omfattar grundlÀggande stöd, men utan automatiserad testning, publicering av officiella versioner och kodkompilationskontroller.
Man kan Àven nÀmna nyligen tillkÀnnagivna projekt och hÀndelser relaterade till Rust:
- Ayrton Muñoz, som tidigare implementerade stöd för plattformen Sony PlayStation 1 i Rust-kompilatorn och arbetade med att portera FreeBSD till datorer med Apple Silicon-chips, har möjliggjort skapandet av kÀrnkomponenter och enhetsdrivrutiner för FreeBSD med Rust. För testning har en uppsÀttning KPI-bindningar (Kernel Programming Interface) föreslagits, vilket möjliggör anvÀndning av Rust-kod i FreeBSD-kÀrnan, samt det ljuddrivrutin virtio (virtio_snd) och HID-drivrutinen DockChannel för tangentbordet pÄ M2 MacBook, och flera lÄgnivÄdrivrutiner för Mac-datorsubsystem med Apple Silicon-chips.
Det pÄpekas att arbetet med Rust-bindningarna har pÄgÄtt sedan slutet av 2024. I bindningarna har bara en del av C-KPI implementerats och de positioneras som instabila, men med tiden planerar man att stabilitetsnivÄn ska nÄ den för grÀnssnittet för sprÄket C. Den föreslagna virtio_snd-drivrutinen Àr anvÀndbar för musikuppspelning i QEMU. Det förvÀntas att Rust-bindningarna Är 2026 kommer att vara tillrÀckligt stabiliserade för att intresserade utvecklare ska kunna börja anvÀnda dem för kodskrivning.
- Benny Siegert, som deltar i utvecklingen av NetBSD, har försökt motivera skÀlen till varför stöd för Rust-sprÄket inte kommer att introduceras i NetBSD-kÀrnan: NetBSD stöder arkitekturer dÀr Rust inte Àr tillgÀngligt; underhÄllet av det befintliga Rust-verktyget i pkgsrc krÀver mycket arbete och stöds endast av nÄgra fÄ utvecklare; stöd för Rust i kÀrnan krÀver att Rust-kompilatorn inkluderas i det grundlÀggande systemet; vid bootstrap av Rust i NetBSD anvÀnds en tidigare version av det binÀra paketet, vilket Àr oacceptabelt för sjÀlvförsörjande distributioner som distribueras i kÀllkod; slÀppcyklerna för Rust Àr inkompatibla med utvecklingscykeln för NetBSD och stödet för Àldre versioner (till exempel fortsÀtter man att stödja NetBSD 9 som slÀpptes 2020, och under dessa omstÀndigheter skulle det krÀvas att sju Är gammal Rust-kompilator tillhandahÄlls och underhÄlls).
- UtgÄvan av den inbÀddade databashanteraren Turso 0.5 har offentliggjorts, skriven i Rust och kompatibel med SQLite pÄ SQL-dialektnivÄ, databasformat och C API. Bland de avancerade funktionerna mÀrks en CDC-mekanism (Change Data Capture) för att spÄra databasÀndringar i realtid, anvÀndning av io_uring för asynkron in- och utdata i Linux, stöd för vektorsökning, en ALTER-uttalande för att Àndra databasscheman och möjligheten att kryptera data i databaser, inkrementell berÀkningslÀge och konstruktionen "BEGIN CONCURRENT".
- Projektet för att möjliggöra anvÀndning av Rusts standardbibliotek i program som körs pÄ GPU-sidan.
- Emuko Àr en RISC-V-emulator, skriven i Rust, som kan ladda Linux, stöder JIT-kompilering och kan spara och ÄterstÀlla tillstÄndssnapshots.
- RustConn (flatpak) Àr ett grafiskt grÀnssnitt för att hantera externa nÀtverksanslutningar till andra vÀrdar, som stöder SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust och SFTP. Koden Àr skriven i Rust med GTK4 och Wayland.
- En ny gren av projektet zlib-rs 0.6 har presenterats, som markerar den första stabila versionen, helt kompatibel med zlib C API och lÀmplig för en transparent ersÀttning av zlib. Projektet syftar till att skapa en sÀker motsvarighet till zlib datakomprimeringsbibliotek. Utvecklingen görs med hÀnsyn till projektet zlib-ng som utvecklar en högpresterande variant av zlib.
- Projektet vcad har presenterats, som utvecklar ett parameterbaserat system för datorstödda designer (CAD) skrivet i Rust och integrerat med AI-agenter via MCP-protokollet. 3D-modellering, simulering, arbete med 2D-skissningar, komponentmontering, import i STEP-format och export i format som STL/GLB/STEP/DXF stöds.
- Ett röstsensor-system skrivet i Rust har offentliggjorts, som anvÀnder AI-modellen Mistral Voxtral Mini 4B Realtime och maskininlÀrningsramverket Burn. Projektet Àr inriktat pÄ röstigenkÀnning i realtid för att generera transkription vid strömning.
- Verktyget c2rust 0.22 har slÀppts, avsett för att översÀtta C-kod (C99) till ett osÀkert Rust-representationsformat som liknar den ursprungliga C-koden. Den resulterande arbetsramen kan sedan anvÀndas för att gradvis översÀtta till idiomatisk Rust och eliminera osÀkra block.
KĂ€lla: opennet.ru
