Objavljen je izdanak programskog jezika Rust 1.94, kojeg je prvotno razvio projekt Mozilla, ali ga trenutno razvija neovisna neprofitna organizacija Rust Foundation. Jezik je fokusiran na sigurno upravljanje memorijom i pruža sredstva za postizanje visoke paralelizacije izvršavanja zadataka, pritom ne koristeći sakupljač smeća i runtime (runtime se svodi na osnovnu inicijalizaciju i podršku standardnoj biblioteci).
Metode rada s memorijom u Rustu usmjerene su na isključivanje grešaka prilikom manipulacije pokazivačima i zaštitu od problema koji nastaju zbog niskog nivoa rada s memorijom, kao što su pristupanje oblasti memorije nakon njenog oslobađanja, dereferenciranje nultih pokazivača, izlazak izvan granica bafera itd. Za distribuciju biblioteka, osiguranje gradnje i upravljanje zavisnostima, projekat se razvija koristeći alat za upravljanje paketima Cargo. Za hostovanje biblioteka podržava se repozitorij crates.io.
Sigurno upravljanje memorijom u Rust-u osigurano je tokom kompajliranja pomoću provjere referenci, praćenja vlasništva nad objektima, uzimanja u obzir vremena života objekata (vidljivost) i procjene ispravnosti pristupa memoriji tokom izvršavanja koda. Rust takođe pruža sredstva za zaštitu od prelivanja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije korišćenja, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli kao podrazumijevano, te nudi jaku statičku tipizaciju za minimiziranje logičkih grešaka.
Glavne novosti:
- Tip slice je dobio metodu array_windows koja stvara iterator za prolazak kroz sječke (slice) „prozorima“ fiksne veličine, koji se pomiču za jedan element svaki put. Za razliku od ranije dostupne metode windows, metoda array_windows djeluje s konstantnom veličinom prozora i vraća pri svakoj iteraciji referencu na niz fiksne veličine (&[T; N]) umjesto sječka neodređene veličine (&[T]). Kako je veličina niza prvotno poznata prevoditelju, radi poboljšanja performansi moguće je izbjeći provjeru granica niza 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());
- U konfiguracijskim datotekama paketa menadžera Cargo (.cargo/config.toml) implementirana je direktiva „include“, koja omogućava umetanje sadržaja drugih datoteka. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- U datoteke s manifestima i konfiguracijske datoteke dodana je podrška za novu verziju markup jezika TOML 1.1, koja uključuje podršku za višelinijske ugrađene tablice, escape sekvence "\xHH" za umetanje heksadecimalnog prikaza bajtova i "\e" za zamjenu "\u001B", mogućnost ostavljanja zareza na kraju posljednjeg elementa i propuštanje navođenja sekundi u vremenskim vrijednostima. serde = { version = "1.0", features = ["derive"] } sada se može zamijeniti s serde = { version = "1.0", features = ["derive"], }
- У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
- ::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
- Ugrađene funkcije za x86 instrukcije avx512fp16
- Ugrađene funkcije za AArch64 instrukcije NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Priznak „const“ primenjen u funkcijama:
- f32::mul_add
- f64::mul_add
- Platform riscv64im-unknown-none-elf has been translated to the third support level. The third level provides basic support but does not include automated testing, the publication of official builds, or the verification of code buildability.
Dodatno lahko omenimo nedavno napovedane projekte in dogodke v povezavi z Rust:
- Ayrton Muñoz, who implemented support for the Sony PlayStation 1 platform in the Rust compiler and worked on porting FreeBSD to Apple Silicon computers, has enabled FreeBSD to create kernel components and device drivers in Rust. A set of KPI bindings (Kernel Programming Interface) has been proposed for testing, allowing Rust code to be used in the FreeBSD kernel, along with a sound driver virtio (virtio_snd), a HID driver DockChannel for the keyboard in the M2 MacBook, and several low-level drivers for the Mac computer subsystems based on Apple Silicon chips.
It is noted that work on the Rust bindings has been ongoing since late 2024. The bindings have only implemented a portion of C-KPI and are positioned as unstable for now, but over time, plans are to bring the stability level up to par with the interface for the C language. The virtio_snd driver proposed as an example is suitable for playing music in QEMU. It is expected that by 2026, the Rust bindings will be sufficiently stabilized for interested developers to begin using them for coding.
- Benny Siegert, involved in the development of NetBSD, tried to justify the reasons why Rust support will not appear in the NetBSD kernel: NetBSD supports architectures for which Rust is unavailable; maintaining the existing Rust toolchain in pkgsrc requires significant effort and is managed by only a few developers; supporting Rust in the kernel necessitates including the Rust compiler in the base system; when bootstrapping Rust in NetBSD, an older version of the binary package is used, which is unacceptable for self-contained distributions that are distributed in source code; Rust release cycles are incompatible with the NetBSD development cycle and the support for older branches (for example, the NetBSD 9 branch, released in 2020, continues to be supported, and in these conditions, supplying and maintaining a six-year-old Rust compiler would be required).
- Objavljen je izdanak ugrađene u aplikacije DBMS Turso 0.5, napisan na jeziku Rust i kompatibilan sa SQLite na nivou SQL dijalekta, formata datoteka Baze podataka i C API-ja. Od proširenih mogućnosti ističe se mehanizam CDC (Change data capture) za praćenje promena u bazi podataka u realnom vremenu, korišćenje io_uring za asinhroni ulaz/izlaz u Linuxu, podrška za vektorsko pretraživanje, prisustvo izraza ALTER za promenu šeme baze podataka, mogućnost šifrovanja podataka u bazi podataka, režim inkrementalnih proračuna, konstrukcija "BEGIN CONCURRENT".
- Projekat za omogućavanje korišćenja standardne biblioteke Rust u programima koji se izvršavaju na strani GPU-a.
- Emuko — emulator RISC-V, napisan na Rustu, sposoban za učitavanje Linuxa, podržava JIT-kompilaciju, sposoban je da čuva i obnavlja snimke stanja.
- RustConn (flatpak) — grafički interfejs za upravljanje spoljnim mrežnim vezama sa drugim hostovima, podržava SSH, RDP, VNC, SPICE, Telnet, Serijski, Kubernetes, Zero Trust i SFTP. Kod je napisan na Rustu koristeći GTK4 i Wayland.
- Predstavljena je nova grana projekta zlib-rs 0.6, označena kao prva stabilna verzija, potpuno kompatibilna sa zlib C API i pogodna za transparentnu zamenu zlib-a. Projekat ima za cilj kreiranje sigurnog ekvivalenta biblioteke za kompresiju podataka zlib. Razvoj se vodi imajući u vidu projekat zlib-ng, koji razvija visokoperformantnu verziju zlib-a.
- Predstavljen je projekat vcad, koji razvija parametarsku sistem automatizovanog projektovanja (CAD), napisan na Rustu i integrisan sa AI agentima putem MCP protokola. Podržava 3D modelovanje, simulaciju, rad sa 2D skicama, sastavljanje komponenti, import u STEP formatu i eksport u STL/GLB/STEP/DXF formatima.
- Objavljen je sistem prepoznavanja govora, napisan na Rustu i koristeći AI model Mistral Voxtral Mini 4B Realtime i framework za mašinsko učenje Burn. Projekat je fokusiran na prepoznavanje govora u realnom vremenu za generisanje transkripcije tokom striminga.
- Izdanje alata c2rust 0.22, namenjenog za prevođenje C koda (C99) u unsafe predstavu na Rustu, blizu svoje strukture originalnom kodu na C-u, je održano. Dobiljeni radni okvir se može koristiti za postepeni prelazak na idiomatski Rust i oslobađanje od unsafe blokova.
Izvor: opennet.ru
