Rust 1.94-utgåvan. Experiment med Rust i FreeBSD-kärnan. Turso-databasen och VCAD i Rust

Programmeringsspråket Rust 1.94, grundat av Mozilla-projektet men nu utvecklat under beskydd av den oberoende ideella organisationen Rust Foundation, har släppts. Språket fokuserar på minnessäkerhet och tillhandahåller verktyg för att uppnå hög parallellitet i uppgiftskörningen, samtidigt som man slipper använda en garbage collector och runtime (körtiden reduceras till grundläggande initialisering och underhåll av standardbiblioteket).

Rusts minneshanteringsmetoder är utformade för att eliminera fel i pekarmanipulation och skydda mot problem som uppstår vid minneshantering på låg nivå, såsom åtkomst till minne efter att det har frigjorts, avreferensering av nullpekare, buffertöverskridningar och så vidare. Projektet utvecklar pakethanteraren Cargo för att distribuera bibliotek, underlätta byggen och hantera beroenden. crates.io-arkivet underhålls för att vara värd för bibliotek.

Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga innovationer:

  • Slice-typen har nu en array_windows-metod. Denna metod skapar en iterator för att passera skivor i fönster med fast storlek som flyttar fram ett element i taget. Till skillnad från den tidigare tillgängliga windows-metoden arbetar array_windows med en konstant fönsterstorlek och returnerar en referens till en array med fast storlek (&[T; N]) istället för en skiva med odefinierad storlek (&[T]) för varje iteration. Eftersom arraystorleken initialt är känd för kompilatorn kan prestandan förbättras genom att undvika gränskontroller vid varje iterationssteg. 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-pakethanterarens konfigurationsfiler (.cargo/config.toml) implementerar direktivet "include", vilket låter dig infoga innehållet från andra filer på plats. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
  • Stöd för den nya versionen av TOML 1.1-märkningsspråket har lagts till i manifest- och konfigurationsfiler. Den här nya versionen lägger till stöd för flerradiga inbäddade tabeller, escape-sekvensen "\xHH" för att infoga hexadecimala byte-representationer och escape-sekvensen "\e" för "\u001B", tillsammans med möjligheten att lämna ett avslutande kommatecken i slutet av det sista elementet och utelämna sekunder i tidsvärden. serde = { version = "1.0", features = ["derive"] } kan nu ersättas med serde = { version = "1.0", features = ["derive"], }
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • <[T]>::array_windows
    • <[T]>::element_offset
    • LazyCell::get
    • LazyCell::get_mut
    • LazyCell::force_mut
    • LazyLock::get
    • LazyLock::get_mut
    • LazyLock::force_mut
    • impl FörsökFrån för användning
    • std::iter::Peekable::next_if_map
    • std::iter::Peekable::next_if_map_mut
    • Inneboende för x86 avx512fp16 instruktioner
    • Intrinsiska parametrar för AArch64 NEON fp16 instruktioner
    • f32::consts::EULER_GAMMA
    • f64::consts::EULER_GAMMA
    • f32::consts::GOLDEN_RATIO
    • f64::consts::GOLDEN_RATIO
  • Tecknet "const" används i funktioner:
    • f32::mul_add
    • f64::mul_add
  • Plattformen riscv64im-unknown-none-elf har flyttats till supportnivå 3. Supportnivå 3 inkluderar grundläggande support, men inkluderar inte automatiserad testning, officiella versionsutgåvor eller versionsverifiering.

Dessutom vill vi lyfta fram nyligen tillkännagivna projekt och evenemang relaterade till Rust:

  • Ayrton Muñoz, som implementerade stöd för Sony PlayStation 1-plattformen i Rust-kompilatorn och portade FreeBSD till datorer med Apple Silicon-chips, har implementerat möjligheten att skriva kärnkomponenter och enhetsdrivrutiner i Rust för FreeBSD. En uppsättning KPI-bindningar (Kernel Programming Interface) som möjliggör användning av Rust-kod i FreeBSD-kärnan har tillhandahållits för testning, tillsammans med virtio-ljuddrivrutinen (virtio_snd), DockChannel HID-drivrutinen för M2 MacBook-tangentbordet och flera lågnivådrivrutiner för Mac-datorundersystem på Apple Silicon-chips, alla skapade med hjälp av dessa bindningar.

    Arbetet med Rust-bindningarna har pågått sedan slutet av 2024. För närvarande implementerar bindningarna endast en del av C-KPI:erna och anses vara instabila, men med tiden planerar de att förbättra deras stabilitet för att matcha den hos ett liknande gränssnitt för C-språket. Drivrutinen virtio_snd, som föreslagits som ett exempel, är lämplig för att spela musik i QEMU. Det förväntas att Rust-bindningarna år 2026 kommer att vara tillräckligt stabila för att intresserade utvecklare ska kunna börja använda dem för att skriva kod.

  • NetBSD-utvecklaren Benny Siegert gav en motivering till varför Rust-stöd inte kommer att finnas i NetBSD-kärnan: NetBSD stöder arkitekturer för vilka Rust inte är tillgängligt; att underhålla den befintliga Rust-verktygskedjan i pkgsrc är en betydande ansträngning och stöds endast av ett fåtal utvecklare; kärnstöd för Rust kräver att Rust-kompilatorn ingår i bassystemet; att starta Rust på NetBSD använder ett äldre binärt paket, vilket är oacceptabelt för fristående distributioner som distribueras som källkod; Rusts utgivningscykler är inkompatibla med NetBSDs utvecklings- och supportcykler för äldre grenar (till exempel fortsätter NetBSD 9, släppt 2020, att stödjas, vilket skulle kräva leverans och support av en sex år gammal Rust-kompilator).
  • Опубликован выпуск встраиваемой в приложения СУБД Turso 0.5, написанной на языке Rust и совместимой с SQLite на уровне диалекта SQL, формата файлов БД и C API. Из расширенных возможностей отмечается механизм CDC (Change data capture) для отслеживания изменения БД в реальном времени, использование io_uring для асинхронного ввода/вывода в Linux, поддержка векторного поиска, наличие выражения ALTER для изменения схемы БД, возможность шифрования данных в БД, режим инкрементальных вычислений, конструкция «BEGIN CONCURRENT».
  • Ett projekt för att möjliggöra användning av Rust-standardbiblioteket i GPU-sidesprogram.
  • Emuko — эмулятор RISC-V, написанный на Rust, способный загружать Linux, поддерживающий JIT-компиляцию, способный сохранять и восстанавливать снапшоты состояния.
  • RustConn (flatpak) är ett grafiskt gränssnitt för att hantera externa nätverksanslutningar till andra värdar, med stöd för SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust och SFTP. Koden är skriven i Rust med GTK4 och Wayland.
  • En ny gren av zlib-rs 0.6-projektet har släppts, vilket markerar den som den första stabila versionen som är helt kompatibel med zlib C API och lämplig som en transparent ersättning för zlib. Projektet syftar till att skapa ett säkert alternativ till zlibs datakomprimeringsbibliotek. Utvecklingen sker med fokus på zlib-ng-projektet, som utvecklar en högpresterande variant av zlib.
  • VCAD-projektet är en utveckling av ett parametriskt datorstödd designsystem (CAD) skrivet i Rust och integrerat med AI-agenter med hjälp av MCP-protokollet. Det stöder 3D-modellering, simulering, 2D-skissning, komponentmontering, STEP-import och STL/GLB/STEP/DXF-export.
  • Ett taligenkänningssystem skrivet i Rust och med hjälp av Mistral Voxtral Mini 4B Realtime AI-modellen och maskininlärningsramverket Burn har publicerats. Projektet fokuserar på taligenkänning i realtid för transkription av liveströmmar.
  • Verktygslådan c2rust 0.22 har släppts. Den är utformad för att översätta C-kod (C99) till en osäker Rust-representation, med liknande struktur som den ursprungliga C-koden. Det resulterande arbetsramverket kan användas för gradvis migrering till idiomatisk Rust och borttagning av osäkra block.

Källa: opennet.ru

Köp pålitlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster