Objavljen je izdanje programskog jezika Rust 1.97, koji je prvotno razvijen od strane projekta Mozilla, a sada se razvija pod pokroviteljstvom neovisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu manipulaciju memorijom i pruža alate za postizanje visokog paralelizma izvršavanja zadataka, a pritom zaobilazi korištenje sakupljača smeća i runtime-a (runtime se svodi na osnovnu inicijalizaciju i podršku standardnoj biblioteci).
Metode upravljanja memorijom u Rust-u usmjerene su na isključivanje grešaka prilikom manipulacije pokazivačima i zaštitu od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, izlazak iz okvira bafera itd. Za distribuciju biblioteka, osiguranje gradnje i upravljanje ovisnostima, projekt se razvija preko upravitelja paketa Cargo. Za hosting biblioteka podržava se repozitorij crates.io.
Sigurna manipulacija memorijom osigurava se u Rustu tijekom kompilacije provjerom referenci, praćenjem vlasništva nad objektima, uzimanjem u obzir vremena života objekata (opseg vidljivosti) i ocjenom točnosti pristupa memoriji tijekom izvršavanja koda. Rust također pruža sredstva za zaštitu od cjelobrojnih prekoračenja, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabla kao zadano te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.
Glavne novine:
- Novi mehanizam dekoracije (mangling) imena funkcija, globalnih varijabli i struktura podataka u generiranim objektivnim i izvršnim datotekama (-Csymbol-mangling-version=v0) je po defaultu uključen. Imena se dekoriraju kako bi se spriječili sukobi tijekom povezivanja različitih programa, tako da se pridružuje specifični kontekst, kao što su put do modula i ime crate paketa.
Ranije korišteni mehanizam dekoracije imena, temeljen na Itanium ABI, imao je nedostatke poput zamjene parametara generičkih tipova s nečitljivim hešovima i postojanja dijelova prevoditelja koji ne koriste Itanium ABI, što je zahtijevalo korištenje specifičnih dekodera imena za Rust. U Rust 1.97 po defaultu je aktiviran mehanizam dekoracije osmišljen posebno za Rust koji ne sadrži navedene nedostatke. Stari mehanizam namjerava se ukloniti u jednom od sljedećih izdanja.
- U paketni menadžer cargo ugrađena je mogućnost upravljanja reakcijom na generirane upozorenja od strane prevoditelja prilikom gradnje. Dodana je varijabla okruženja CARGO_BUILD_WARNINGS koja može prihvatiti tri vrijednosti: warn (default) — ispisuje upozorenje na ekran; allow — skriva ispis upozorenja; deny — tretira upozorenja kao greške koje zaustavljaju gradnju.
U prošlim verzijama, kako bi se završila gradnja nakon ispisivanja upozorenja, bilo je potrebno navesti „-Dwarnings“ u RUSTFLAGS za prevoditelj, no prilikom promjene RUSTFLAGS paketni menadžer cargo smatrao je gradnju novom, nije uzeo u obzir podatke iz predmemorije i iznova rekonstruirao cijeli projekt. Premještanje postavke na stranu cargo isključilo je resetiranje predmemorije i potrebu za potpunom rekonstrukcijom pri promjeni režima obrade upozorenja, kao i pojednostavilo uključivanje obrade upozorenja kao grešaka u sustavima kontinuirane integracije.
- Zadano je da se poruke koje isporučuje linker prikažu prema zadanim postavkama. Poruke se prikazuju u obliku upozorenja putem posebnog lint pravila «linker_messages», koje ne pripada standardnoj grupi «warnings». Rustc filtrira poruke koje su tipične lažne uzbune ili normalno ponašanje, ostavljajući upozorenja koja mogu ukazivati na probleme, kao što su upozorenja o zastarjelim opcijama i neželjenim postavkama. Ranije je informacija od linkera bila prikazana samo u slučaju greške, a inače su sve poruke bile skrivene. Da biste se vratili na staro ponašanje, možete dodati u Cargo.toml: [lints.rust] linker_messages = «allow»
- U stabilne verzije prebačen je novi set API-ja, uključujući stabilizirane metode i implementacije tipa:
- Zadano za RepeatN
- Kopiraj za ffi::FromBytesUntilNulError
- Send za std::fs::File za UEFI
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- Oznaka «const» primijenjena je u metodi char::is_control.
Dodatno se mogu istaknuti nedavno najavljeni projekti i događaji vezani za Rust:
- Projekt zinnia razvija modularnu Unix-sličnu jezgru, napisanu na jeziku Rust i distribuiranu pod GPLv2 licencom. Jezgra podržava POSIX sučelja i neka proširenja iz BSD-a i Linux-a, kao što su epoll i timerfd. Za iscrtavanje i organizaciju unosa dostupni su DRM (Direct Rendering Manager) i evdev drajveri. Implementirane funkcionalnosti su dovoljne za pokretanje Xfce radnog okruženja na X serveru i kompozitnom poslužitelja Westonu temeljenom na Waylandu. Podržava se pokretanje i u emulatoru QEMU, kao i na pravom hardveru, poput laptopa ThinkPad E14 G7.
- Predstavljen je izlaz komunikacijske biblioteke iroh 1.0, koja omogućava uspostavljanje mrežnih veza između aplikacija na različitim hostovima s povezivanjem putem kriptografskih ključeva, umjesto IP adresa (navodi se ključ s kojim se treba povezati i iroh pronalazi povezani host i uspostavlja šifriranu vezu koristeći QUIC protokol). Gdje je moguće, uspostavljaju se izravne P2P veze, ali ako to nije moguće, aktivira se povratak na rad putem relaja, koji se također koriste za otkrivanje hostova prema ključevima. Moguće je pokretanje vlastitog relaya ili povezivanje s podržanim javnim relanjem zajednice.
Među naprednim mogućnostima: podrška za Multipath QUIC za isporuku paketa istovremeno preko više puteva, mogućnost rada iza NAT-a, režim statičke konfiguracije za povezivanje s lokalnim uređajima bez pristupa internetu, mogućnost kompajliranja u međukod WASM za izvršavanje unutar preglednika, podrška za izradu vlastitih transporta, na primjer, za povezivanje putem Bluetootha, WiFi Aware ili LoRa. Kod je napisan na Rustu i distribuira se pod licencama Apache-2.0 i MIT. Dostupni su omotači za Python, Node.js, Kotlin i Swift.
- Autor serverne JavaScript platforme Bun objavio je članak s analizom projekta prepisivanja Buna s jezika Zig na Rust, koristeći AI model Claude Fable. Napominje se da će Bun 1.3.14 biti posljednje izdanje na Zigu, a sljedeća verzija Bun 1.4.0 bit će na Rustu. Sudeći po provedenim testovima, verzija na Rustu troši značajno manje memorije i 2-5% je brža od verzije na Zigu. Veličina izvršne datoteke u verziji na Rustu smanjena je za 20%.
Izvor: opennet.ru
