U publikua versioni i gjuhës së programimit të përgjithshëm Rust 1.58, i bazuar në projektin Mozilla, por tani zhvillohet nën mbështetje të organizatës së pavarur jo-fitimprurëse Rust Foundation. Gjuha është e fokusuar në sigurinë e menaxhimit të memories, ofron menaxhim automatik të memories dhe siguron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, pa përdorur mbledhës plehrash dhe runtime (runtime përfshin vetëm inicializimin bazë dhe mbështetje për bibliotekën standarde).
Menaxhimi automatik i memories në Rust e shpëton zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbron nga probleme që lindin nga puna në nivel të ulët me memorien, si aksesimi në një zonë të memories pas çlirimit të saj, dereferimi i treguesve nul, dalja jashtë kufijve të buffers dhe të tjerë. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillon menaxherin e pakove Cargo. Për hostimin e bibliotekave, mbështetet repozitari crates.io.
TĂ« rejat kryesore:
- Në blloqet e formatimit të vargjeve, përveç mundësisë tashmë të disponueshme për zëvendësimin e variablave të përmendur shprehimisht pas vargut sipas numrit dhe emrit, është implementuar mundësia e zëvendësimit të identifikatorëve të rastësishëm duke shtuar në varg shprehjet «{identifikator}». Shembuj: // Më parë përdoreshin ndërtimet: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!(«Hello, {person}!», person = get_person()); // tani mund të specifikohet let person = get_person(); println!(«Hello, {person}!»);
Identifikatorët gjithashtu mund të specifikohen direkt në parametrat e formatimit. let (width, precision) = get_format(); for (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }
Zëvendësimi i ri punon në të gjitha makros që mbështesin përcaktimin e formatit të vargjeve, përveç makros «panic!» në versionet e gjuhës Rust 2015 dhe 2018, ku panic!(«{ident}») trajtohet si një varg i zakonshëm (në Rust 2021 zëvendësimi funksionon).
- Përfaqësimi i strukturës std::process::Command është ndryshuar në platformën Windows, e cila gjatë ekzekutimit të komandave për arsye sigurie nuk kërkon më skedarët ekzekutues në katalogun aktual. Katalogu aktual është përjashtuar pasi mund të përdoret për të organizuar ekzekutimin e kodit nga një sulmues në rast se programet ekzekutohen në katalogë të pa besueshëm (CVE-2021-3013). Logjika e re e përcaktimit të skedarëve ekzekutues parashikon kërkimin në katalogët Rust, në katalogun e aplikacionit, katalogun sistemik të Windows dhe katalogët e specifikuar në variablin mjedisor PATH.
- Në bibliotekën standarde është zgjeruar numri i funksioneve të shënuara me «#[must_use]» për të ofruar paralajmërime në rast se vlera e kthyer injorohet, duke ndihmuar në identifikimin e gabimeve që shkaktohen nga supozimi se funksioni do të ndryshojë vlerat, e jo të kthejë një vlerë të re.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Metadata::is_symlink
- Path::is_symlink
- {integer}::saturating_div
- Option::unwrap_unchecked
- Result::unwrap_unchecked
- Result::unwrap_err_unchecked
- Karakteristika «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar në funksionet:
- Duration::new
- Duration::checked_add
- Duration::saturating_add
- Duration::checked_sub
- Duration::saturating_sub
- Duration::checked_mul
- Duration::saturating_mul
- Duration::checked_div
- Lejohet dereferencimi i treguesve «*const T» në kontekste «const».
- NĂ« menaxherin e paketave Cargo Ă«shtĂ« shtuar njĂ« fushĂ« rust_version nĂ« metadatĂ«n e paketĂ«s, dhe nĂ« komandĂ«n «cargo install» Ă«shtĂ« shtuar opsioni «âmessage-format».
- Compileri përmban mbështetje për mekanizmin e mbrojtjes CFI (Control Flow Integrity), i cili shton një kontroll para çdo thirrjeje të drejtpërdrejtë të funksionit për të identifikuar disa forma të sjelljes së paqartë që potencialisht mund të çojnë në shkeljen e rendit normal të ekzekutimit (control flow) si rezultat i përdorimit të eksploitëve që ndryshojnë treguesit e funksioneve të ruajtur në memorie.
- Compileri tani mbështet versionet 5 dhe 6 të formatit coverage-matching LLVM, i përdorur për të vlerësuar mbulimin e kodit gjatë testimit.
- Kërkesat për versionin minimal të LLVM në compilerin janë rritur në LLVM 12.
- Implementohet niveli i tretë i mbështetjes për platformën x86_64-unknown-none. Nivelit të tretë i referohet mbështetjes bazike, por pa testim automatizuar, publikimin e ndërtimeve zyrtare dhe verifikimin e mundësisë për ndërtimin e kodit.
Gjithashtu, mund të theksohet publikimi nga kompania Microsoft i versionit të bibliotekave Rust for Windows 0.30, të cilat e lejojnë përdorimin e gjuhës Rust për zhvillimin e aplikacioneve për sistemin operativ Windows. Në paketë përfshihen dy crate-paketa (windows dhe windows-sys), përmes të cilave mund të aksesoni Win API në programet në gjuhën Rust. Kodi për mbështetje API gjenerohet në mënyrë dinamike nga metadatat që përshkruajnë API, duke lejuar kështu mbështetje jo vetëm për thirrjet ekzistuese të Win API, por edhe për ato që do të shfaqen në të ardhmen. Në versionin e ri është shtuar mbështetje për platformën e synuar UWP (Universal Windows Platform), duke realizuar tipazhet Handle dhe Debug.
Burimi: opennet.ru
