Izdanje Rust 1.94. Eksperimentisanje sa Rustom u FreeBSD kernelu. Turso baza podataka i VCAD u Rustu

Programski jezik Rust 1.94, koji je osnovao Mozilla projekat, ali se sada razvija pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation, je objavljen. Jezik se fokusira na sigurnost memorije i pruža alate za postizanje visokog paralelizma izvršavanja zadataka, bez upotrebe sakupljača smeća i okruženja za izvršavanje (izvršavanje je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode upravljanja memorijom su dizajnirane da eliminišu greške u manipulaciji pokazivačima i zaštite od problema koji proizlaze iz upravljanja memorijom na niskom nivou, kao što su pristup memoriji nakon što je oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera i tako dalje. Projekat razvija Cargo upravitelj paketa za distribuciju biblioteka, olakšavanje izgradnje i upravljanje zavisnostima. Repozitorij crates.io se održava za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Tip slice sada ima metodu array_windows. Ova metoda kreira iterator za prelazak kroz sliceove u prozorima fiksne veličine koji se pomiču za jedan element odjednom. Za razliku od prethodno dostupne metode windows, array_windows operira s konstantnom veličinom prozora i vraća referencu na niz fiksne veličine (&[T; N]) umjesto slicea nedefinirane veličine (&[T]) za svaku iteraciju. Budući da je veličina niza inicijalno poznata kompajleru, performanse se mogu poboljšati izbjegavanjem provjere granica u svakoj fazi iteracije. 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());
  • Konfiguracijske datoteke upravitelja Cargo paketa (.cargo/config.toml) implementiraju direktivu "include", koja vam omogućava da umetnete sadržaj drugih datoteka na mjesto. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
  • Podrška za novu verziju jezika za označavanje TOML 1.1 dodana je u datoteke manifesta i konfiguracije. Ova nova verzija dodaje podršku za višeredne ugrađene tabele, escape sekvencu "\xHH" za umetanje heksadecimalnih bajtnih reprezentacija i escape sekvencu "\e" za "\u001B", zajedno s mogućnošću ostavljanja zareza na kraju posljednjeg elementa i izostavljanja sekundi u vremenskim vrijednostima. serde = { version = "1.0", features = ["derive"] } sada se može zamijeniti sa serde = { version = "1.0", features = ["derive"], }
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • <[T]>::array_windows
    • <[T]>::pomak_elementa
    • LazyCell::uzmi
    • LazyCell::get_mut
    • LazyCell::force_mut
    • LazyLock::get
    • LazyLock::get_mut
    • LazyLock::force_mut
    • imp TryFrom za upotrebu
    • std::iter::Peekable::next_if_map
    • std::iter::Peekable::next_if_map_mut
    • Intrinzične funkcije za x86 avx512fp16 instrukcije
    • Intrinzične funkcije za AArch64 NEON fp16 instrukcije
    • f32::consts::EULER_GAMMA
    • f64::consts::EULER_GAMMA
    • f32::consts::ZLATNI_OMJER
    • f64::consts::ZLATNI_OMJER
  • Znak "const" se koristi u funkcijama:
    • f32::mul_add
    • f64::mul_add
  • Platforma riscv64im-unknown-none-elf je premještena na nivo podrške 3. Nivo podrške 3 uključuje osnovnu podršku, ali ne uključuje automatizirano testiranje, službena izdanja verzija ili verifikaciju verzija.

Osim toga, željeli bismo istaknuti nedavno najavljene projekte i događaje vezane za Rust:

  • Ayrton Muñoz, koji je implementirao podršku za platformu Sony PlayStation 1 u Rust kompajleru i portovao FreeBSD na računare sa Apple Silicon čipovima, implementirao je mogućnost pisanja komponenti kernela i drajvera uređaja u Rustu za FreeBSD. Za testiranje je obezbijeđen skup KPI (Kernel Programming Interface) povezivanja koja omogućavaju korištenje Rust koda u FreeBSD kernelu, zajedno sa virtio zvučnim drajverom (virtio_snd), DockChannel HID drajverom za M2 MacBook tastaturu i nekoliko niskonivojskih drajvera za Mac računarske podsisteme na Apple Silicon čipovima, a svi su kreirani korištenjem ovih povezivanja.

    Rad na Rust binding-ovima traje od kraja 2024. godine. Trenutno, binding-ovi implementiraju samo dio C-KPI-jeva i smatraju se nestabilnim, ali s vremenom se planira poboljšati njihova stabilnost kako bi se uskladila sa sličnim interfejsom za C jezik. Drajver virtio_snd, predložen kao primjer, pogodan je za reprodukciju muzike u QEMU-u. Očekuje se da će do 2026. godine Rust binding-ovi biti dovoljno stabilni da ih zainteresovani programeri počnu koristiti za pisanje koda.

  • NetBSD programer Benny Siegert ponudio je obrazloženje zašto se podrška za Rust neće pojaviti u NetBSD kernelu: NetBSD podržava arhitekture za koje Rust nije dostupan; održavanje postojećeg Rust alata u pkgsrc predstavlja značajan napor i podržava ga samo nekoliko programera; podrška za Rust u kernelu zahtijeva da Rust kompajler bude uključen u osnovni sistem; pokretanje Rusta na NetBSD-u koristi naslijeđeni binarni paket, što je neprihvatljivo za samostalne distribucije distribuirane kao izvorni kod; Rustovi ciklusi izdanja nisu kompatibilni s NetBSD-ovim ciklusima razvoja i podrške za naslijeđene grane (na primjer, NetBSD 9, objavljen 2020. godine, i dalje se podržava, što bi zahtijevalo isporuku i podršku šest godina starog Rust kompajlera).
  • Objavljen je Turso 0.5, ugrađeni sistem za upravljanje bazama podataka (DBMS) napisan u Rustu i kompatibilan sa SQLiteom u cijelom njegovom SQL dijalektu, formatu datoteke baze podataka i C API-ju. Poboljšane funkcije uključuju CDC (Change Data Capture) mehanizam za praćenje promjena u bazi podataka u realnom vremenu, korištenje io_uring za asinhroni I/O na Linuxu, podršku za vektorsko pretraživanje, naredbu ALTER za promjenu sheme baze podataka, mogućnost šifriranja podataka baze podataka, inkrementalni način izračunavanja i konstrukciju "BEGIN CONCURRENT".
  • Projekat koji omogućava korištenje standardne biblioteke Rust u programima na strani GPU-a.
  • Emuko je RISC-V emulator napisan u Rustu koji može pokrenuti Linux, podržava JIT kompilaciju i može spremati i vraćati snimke stanja.
  • RustConn (flatpak) je grafički interfejs za upravljanje eksternim mrežnim vezama prema drugim hostovima, koji podržava SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust i SFTP. Kod je napisan u Rustu koristeći GTK4 i Wayland.
  • Objavljena je nova grana projekta zlib-rs 0.6, što je označava kao prvu stabilnu verziju u potpunosti kompatibilnu sa zlib C API-jem i pogodnu za transparentnu zamjenu za zlib. Cilj projekta je stvaranje sigurne alternative zlib biblioteci za kompresiju podataka. Razvoj se provodi s fokusom na projekat zlib-ng, koji razvija visokoperformansnu varijantu zlib-a.
  • VCAD projekat je razvoj parametarskog CAD (računarski potpomognutog dizajna) sistema napisanog u Rustu i integriranog sa AI agentima koristeći MCP protokol. Podržava 3D modeliranje, simulaciju, 2D skiciranje, montažu komponenti, STEP uvoz i STL/GLB/STEP/DXF izvoz.
  • Objavljen je sistem za prepoznavanje govora napisan u Rustu koji koristi Mistral Voxtral Mini 4B Realtime AI model i Burn framework za mašinsko učenje. Projekat se fokusira na prepoznavanje govora u hodu za transkripciju uživo.
  • Objavljen je c2rust 0.22 alat. Dizajniran je za prevođenje C koda (C99) u nesigurnu Rust reprezentaciju, sličnu po strukturi originalnom C kodu. Rezultirajući radni okvir može se koristiti za postepenu migraciju na idiomatski Rust i uklanjanje nesigurnih blokova.

izvor: opennet.ru

Dodajte komentar