Objavljena je bila izdaja splošnega programskega jezika Rust 1.64, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).
Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.
Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.
Glavne novosti:
- Povečane zahteve za okolje Linux V prevajalniku, upravljalniku paketov Cargo in standardni knjižnici libstd so bile minimalne zahteve za Glibc zvišane z različice 2.11 na 2.17, jedra pa Linux Od različice 2.6.32 do 3.2. Omejitve veljajo tudi za izvedljive datoteke aplikacij Rust, zgrajene z libstd. RHEL 7, SLES 12-SP5 in druge distribucije so skladne z novimi zahtevami. Debian 8 in Ubuntu 14.04. Podpora za RHEL 6, SLES 11-SP4 bo ukinjena. Debian 7 in Ubuntu 12.04. Za uporabnike, ki uporabljajo izvedljive datoteke, zgrajene v Rust Toolchainu, v okoljih s starejšim jedrom Linux, je priporočljivo, da nadgradijo svoje sisteme, ostanejo na starejših izdajah prevajalnikov ali neodvisno vzdržujejo svojo vejo libstd z vmesnimi plastmi, da ohranijo združljivost.
Med razlogi za konec podpore starejšim Linux-sistemi omenjajo omejene vire za nadaljnje ohranjanje združljivosti s starejšimi okolji. Podpora za starejši Glibc zahteva uporabo starejših orodij pri preverjanju v sistemu neprekinjene integracije, glede na povečane zahteve glede različic za LLVM in orodja za navzkrižno prevajanje. Povečane zahteve glede različice jedra so posledica možnosti uporabe novih sistemskih klicev v libstd brez potrebe po vzdrževanju posrednikov za zagotavljanje združljivosti s starejšimi jedri.
- Stabilizirana je lastnost IntoFuture, ki spominja na IntoIterator, vendar se od slednjega razlikuje po uporabi zank ».await« namesto »for ... in ...«. V kombinaciji z IntoFuture lahko ključna beseda ".await" pričakuje ne le lastnost prihodnosti, ampak tudi vse druge vrste, ki jih je mogoče pretvoriti v prihodnost.
- Pripomoček za analizo rje je vključen v zbirko pripomočkov, ki so na voljo z izdajami Rust. Pripomoček je na voljo tudi za namestitev z uporabo rustup (komponenta rustup add rust-analyzer).
- Upravitelj paketov Cargo vključuje dedovanje delovnega prostora za odpravo podvajanja skupnih vrednosti polj med paketi, kot so različice Rust in URL-ji skladišč. Dodana je tudi podpora za gradnjo za več ciljnih platform hkrati (zdaj lahko določite več kot en parameter v možnosti »--target«).
- Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
- prihodnost::V prihodnost
- num::NonZero*::checked_mul
- num::NonZero*::checked_pow
- num::NonZero*::saturating_mul
- num::NonZero*::saturating_pow
- num::NonZeroI*::abs
- num::NonZeroI*::checked_abs
- num::NonZeroI*::overflowing_abs
- num::NonZeroI*::saturating_abs
- num::NonZeroI*::unsigned_abs
- num::NonZeroI*::wrapping_abs
- num::NonZeroU*::checked_add
- num::NonZeroU*::checked_next_power_of_two
- num::NonZeroU*::saturating_add
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- Tipi, združljivi s C, ki so bili prej stabilizirani v modulu std::ffi, so bili dodani v jedro in knjižnico alloc:
- jedro::ffi::CStr
- core::ffi::FromBytesWithNulError
- alloc::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- Tipi C, ki so bili prej stabilizirani v modulu std::os::raw, so bili dodani moduloma core::ffi in std::ffi (na primer, tipa c_uint in c_ulong sta bila predlagana za tipa uint in ulong C):
- ffi::c_char
- ffi::c_double
- ffi::c_float
- ffi::c_int
- ffi::c_long
- ffi::c_longlong
- ffi::c_schar
- ffi::c_short
- ffi::c_uchar
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ushort
- Nizkonivojski upravljalniki so bili stabilizirani za uporabo z mehanizmom ankete (v prihodnosti je načrtovana zagotovitev poenostavljenega API-ja, ki ne zahteva uporabe nizkonivojskih struktur, kot sta Pull in Pin):
- prihodnost::poll_fn
- naloga::pripravljena!
- V funkciji slice::from_raw_parts je uporabljen atribut “const”, ki določa možnost uporabe v kateremkoli kontekstu namesto konstant.
- Za bolj kompaktno shranjevanje podatkov je bila spremenjena postavitev pomnilnika struktur Ipv4Addr, Ipv6Addr, SocketAddrV4 in SocketAddrV6. Lahko pride do težave z združljivostjo paketov z enim zabojem, ki uporabljajo std::mem::transmute za nizkonivojsko manipulacijo struktur.
- V prevajalniku Rust, zgrajenem za platformo Windows Uporabljene so bile optimizacije PGO (profile-guided optimization), ki so omogočile povečanje učinkovitosti prevajanja kode za 10–20 %.
- Prevajalnik je implementiral novo opozorilo o neuporabljenih poljih v določenih strukturah.
Poleg tega si lahko ogledate poročilo o stanju razvoja alternativne izvedbe prevajalnika jezika Rust, ki ga je pripravil projekt gccrs (GCC Rust) in odobren za vključitev v GCC. Po integraciji sprednjega dela je mogoče standardna orodja GCC uporabiti za prevajanje programov v jeziku Rust brez potrebe po namestitvi prevajalnika rustc, zgrajenega z razvojem LLVM. Dokler bo razvoj potekal po pravi poti in razen kakršnih koli nepredvidenih težav, bo vmesnik Rust integriran v izdajo GCC 13, načrtovano za maj naslednje leto. Implementacija GCC 13 za Rust bo v statusu beta in še ni privzeto omogočena.
Vir: opennet.ru
