Objavljen je izdanak programskog jezika Rust 1.97, koji je izvorno razvijen u okviru projekta Mozilla, ali ga sada razvija neprofitna organizacija Rust Foundation. Jezik se fokusira na sigurno upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma izvršavanja zadataka, pri čemu se ne oslanja na prikupljač smeća i runtime (runtime se svodi na osnovno inicijalizovanje i održavanje standardne biblioteke).
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:
- Po defaultu je uključena nova shema dekoracije (mangling) imena funkcija, globalnih varijabli i struktura podataka u generisanim objektivnim i izvođenim datotekama (-Csymbol-mangling-version=v0). Imena se dekoriraju kako bi se sprečili konflikti tokom spajanja različitih programa, prikačivanjem specifičnog konteksta, kao što je put do modula i ime crate paketa.
Ranije korišćena shema dekoracije imena, zasnovana na Itanium ABI, imala je nedostatke poput zamene parametara generika sa nečitljivim hešovima i prisustva delova kompajlera koji ne koriste Itanium ABI, što je zahtevalo korišćenje specifičnih Rust dekodera imena. U Rust 1.97 se po defaultu koristi shema dekoracije koja je posebno razvijena za Rust i koja nema pomenute nedostatke. Stara shema će biti uklonjena u jednom od narednih izdanja.
- U paket menadžer cargo ugrađena je mogućnost upravljanja odgovorom na generisane upozorenja od strane kompajlera tokom građevine. Dodana je promenljiva okruženja CARGO_BUILD_WARNINGS, koja može prihvatiti tri vrednosti: warn (po defaultu) — ispis upozorenja na ekran; allow — skrivanje ispisa upozorenja; deny — tretiranje upozorenja kao grešaka koje zaustavljaju građevinu.
U prethodnim verzijama, da bi se završila građevina nakon ispisa upozorenja, bilo je potrebno da se unese „-Dwarnings“ u RUSTFLAGS za kompajler, ali pri promeni RUSTFLAGS paket menadžer cargo je smatrao građevinu novom, nije uzimao u obzir podatke u kešu i ponovo je kompajlirao ceo projekat. Premestanje podešavanja na stranu cargo je isključilo resetovanje keša i potrebu za potpunom rekonstrukcijom pri promeni režima obrade upozorenja, kao i pojednostavilo uključivanje obrade upozorenja kao grešaka u sistemima kontinuirane integracije.
- Pri zbiranju so privzeto vključena obvestila, ki jih izpiše povezovalnik. Obvestila so prikazana v obliki opozoril prek posebnega lint-pravila „linker_messages“, ki ne spada v standardno skupino „warnings“. Pri tem rustc filtrira sporočila, ki so tipična lažna opozorila ali normalno vedenje, in pusti opozorila, ki bi lahko nakazovala na težave, kot so opozorila o zastarelih možnostih in nezaželenih nastavitvah. Prej so bile informacije iz povezovalnika prikazane le ob neuspehu, sicer so bila vsa sporočila skrita. Za vrnitev starega vedenja lahko v Cargo.toml dodate: [lints.rust] linker_messages = „allow“
- У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
- Privzeto za RepeatN
- Kopiraj za ffi::FromBytesUntilNulError
- Pošlji za std::fs::File za UEFI
- ::izoliraj_najvišji_enojni
- ::izoliraj_najnižji_enojni
- ::najvišji_enojni
- ::najnižji_enojni
- ::bitna_širina
- NonZero::izoliraj_najvišji_enojni
- NonZero::izoliraj_najnižji_enojni
- NonZero::najvišji_enojni
- NonZero::najnižji_enojni
- NonZero::bitna_širina
- Znak „const“ je uporabljen v metodi char::is_control.
Dodatno lahko omenimo nedavno napovedane projekte in dogodke v povezavi z Rust:
- Projekt zinnia razvija modularno Unix-podobno jedro, napisano v jeziku Rust in distribuirano pod licenco GPLv2. Jedro podpira POSIX-vmesnike in nekatere razširitve iz BSD in Linuxa, kot sta epoll in timerfd. Na voljo so gonilniki DRM (Direct Rendering Manager) in evdev za risanje in organizacijo vnosa. Implementirane funkcionalnosti zadostujejo za zagon delovnega okolja Xfce, ki teče pod X-strežnikom in kompozitnim strežnika Westonom na osnovi Waylanda. Podprt je zagon tako v emulatorju QEMU kot na realni opremi, kot je prenosni računalnik ThinkPad E14 G7.
- Predstavljen je izid komunikacijske knjižnice iroh 1.0, ki omogoča vzpostavljanje omrežnih povezav med aplikacijami na različnih gostiteljih s povezovanjem prek kriptografskih ključev, namesto IP naslovov (navedete ključ, s katerim se je treba povezati, in iroh najde povezan gostitelj ter vzpostavi šifrirano povezavo z uporabo protokola QUIC). Kjer je mogoče, so vzpostavljene neposredne P2P-povezave, vendar pa se, če to ni mogoče, uporabi preklop na delovanje prek relajev, ki se prav tako uporabljajo za odkrivanje gostiteljev po ključih. Možen je zagon lastnega relaya ali povezava s podprtimi javnimi relayi v skupnosti.
Med številnimi naprednimi funkcijami: podpora za Multipath QUIC za hkratno dostavo paketov po več poteh, možnost delovanja iz NAT, način statične konfiguracije za povezovanje z lokalnimi napravami brez dostopa do interneta, možnost sestavljanja v medijskokodo WASM za izvajanje v brskalniku, podpora za ustvarjanje lastnih transportov, na primer za povezovanje prek Bluetootha, WiFi Aware ali LoRa. Koda je napisana v Rustu in razširja se pod licencami Apache-2.0 in MIT. Na voljo so vtičniki za Python, Node.js, Kotlin in Swift.
- Avtor strežniške JavaScript platforme Bun je objavil članek o projektu prepisovanja Buna iz jezika Zig v Rust, pri čemer je uporabil AI model Claude Fable. Omenjeno je, da bo Bun 1.3.14 zadnja različica v Zig in da bo naslednja različica Bun 1.4.0 že v Rustu. Glede na opravljene teste različica v Rustu porabi znatno manj pomnilnika in je 2-5% hitrejša od različice v Zigu. Velikost izvršljive datoteke v različici v Rustu se je zmanjšala za 20%.
Izvor: opennet.ru
