Bol vydaný univerzálny programovací jazyk Rust 1.64, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.
Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.
Hlavné inovácie:
- Zvýšili sa požiadavky na linuxové prostredie v kompilátore, správcovi balíkov Cargo a štandardnej knižnici libstd – minimálne požiadavky pre Glibc sa zvýšili z verzie 2.11 na 2.17 a linuxové jadro z verzie 2.6.32 na 3.2. Obmedzenia sa vzťahujú aj na spustiteľné súbory aplikácií Rust vytvorené pomocou libstd. Distribučné súpravy RHEL 7, SLES 12-SP5, Debian 8 a Ubuntu 14.04 spĺňajú nové požiadavky. Podpora pre RHEL 6, SLES 11-SP4, Debian 7 a Ubuntu 12.04 bude ukončená. Používatelia, ktorí používajú spustiteľné súbory vytvorené v Rust v prostrediach so starším jadrom Linuxu, sa vyzývajú, aby upgradovali svoje systémy, zostali na starších vydaniach kompilátora alebo udržiavali svoju vlastnú vidlicu libstd s vrstvami, aby si zachovali kompatibilitu.
Jedným z dôvodov ukončenia podpory pre staršie systémy Linux sú obmedzené zdroje na zachovanie kompatibility so staršími prostrediami. Podpora pre starší Glibc vyžaduje použitie starších nástrojov pri kontrole v systéme nepretržitej integrácie, vzhľadom na rastúce požiadavky na verzie v LLVM a pomocných programoch pre krížovú kompiláciu. Nárast požiadaviek na verziu jadra je spôsobený možnosťou používať nové systémové volania v libstd bez potreby udržiavať vrstvy, aby bola zabezpečená kompatibilita so staršími jadrami.
- Bola stabilizovaná vlastnosť IntoFuture, ktorá sa podobá na IntoIterator, ale líši sa od neho používaním slučiek „.wait“ namiesto „for ... in ...“. V kombinácii s IntoFuture môže kľúčové slovo „.wait“ očakávať nielen vlastnosť Budúcnosti, ale aj akékoľvek iné typy, ktoré možno previesť na Budúcnosť.
- Pomôcka na analýzu hrdze je súčasťou kolekcie pomôcok poskytovaných s vydaniami Rust. Nástroj je dostupný aj pre inštaláciu pomocou rustup (komponent rustup pridať analyzátor hrdze).
- Správca balíkov Cargo zahŕňa dedenie pracovného priestoru, aby sa eliminovala duplicita bežných hodnôt polí medzi balíkmi, ako sú verzie Rust a adresy URL úložiska. Tiež pridaná podpora pre vytváranie pre niekoľko cieľových platforiem naraz (teraz môžete zadať viac ako jeden parameter vo voľbe „--target“).
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- budúcnosť::IntoFuture
- 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
- Typy kompatibilné s C, predtým stabilizované v module std::ffi, boli pridané do jadra a knižnice alloc:
- jadro::ffi::CStr
- core::ffi::FromBytesWithNulError
- alloc::ffi::CString
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- Typy C predtým stabilizované v module std::os::raw boli pridané do modulov core::ffi a std::ffi (napríklad typy c_uint a c_ulong boli navrhnuté pre typy C uint a ulong):
- 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
- Nízkoúrovňové manipulátory boli stabilizované pre použitie s mechanizmom Poll (v budúcnosti sa plánuje poskytovanie zjednodušeného API, ktoré nevyžaduje použitie nízkoúrovňových štruktúr, ako je Pull and Pin):
- budúcnosť::poll_fn
- úloha::pripravený!
- Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa vo funkcii slice::from_raw_parts.
- V záujme kompaktnejšieho ukladania údajov sa zmenilo rozloženie pamäte štruktúr Ipv4Addr, Ipv6Addr, SocketAddrV4 a SocketAddrV6. Môže sa vyskytnúť problém s kompatibilitou s balíkmi s jednou prepravkou, ktoré používajú std::mem::transmute na manipuláciu so štruktúrami na nízkej úrovni.
- Zostavenie kompilátora hrdze pre platformu Windows využíva optimalizácie PGO (profile-guided optimization), ktoré umožnili zvýšiť výkon kompilácie kódu o 10-20 %.
- Kompilátor implementoval nové upozornenie na nepoužívané polia v určitých štruktúrach.
Okrem toho si môžete všimnúť správu o stave vývoja alternatívnej implementácie kompilátora jazyka Rust, pripravenú projektom gccrs (GCC Rust) a schválenú na zahrnutie do GCC. Po integrácii frontendu je možné použiť štandardné nástroje GCC na kompiláciu programov v jazyku Rust bez potreby inštalácie kompilátora rustc, vytvoreného pomocou vývoja LLVM. Pokiaľ bude vývoj na dobrej ceste a ak nedôjde k žiadnym nepredvídaným problémom, bude frontend Rust integrovaný do vydania GCC 13 naplánovaného na máj budúceho roka. Implementácia GCC 13 Rust bude v beta stave, zatiaľ nie je predvolene povolená.
Zdroj: opennet.ru