Vyšlo vydanie univerzálneho programovacieho jazyka Rust 1.58, založeného projektom Mozilla, no teraz vyvinutého pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte, poskytuje automatickú správu pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh bez použitia garbage collectora alebo runtime (runtime je zredukované na základnú inicializáciu a údržbu štandardnej knižnice).
Automatická správa pamäte Rust eliminuje chyby pri manipulácii s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencie nulového ukazovateľa, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, zabezpečenie montáže 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.
Hlavné inovácie:
- V blokoch formátovania reťazcov je okrem predtým dostupnej možnosti nahrádzať premenné explicitne uvedené za reťazcom číslom a názvom implementovaná možnosť nahrádzať ľubovoľné identifikátory pridaním výrazu „{identifikátor}“ do reťazca. Napríklad: // Predtým podporované konštrukcie: println!("Ahoj, {}!", get_person()); println!("Dobrý deň, {0}!", get_person()); println!("Dobrý deň, {osoba}!", osoba = get_person()); // teraz môžete zadať let person = get_person(); println!("Dobrý deň, {osoba}!");
Identifikátory je možné zadať aj priamo v možnostiach formátovania. let (šírka, presnosť) = get_format(); for (meno, skóre) v get_scores() { println!("{meno}: {skóre:šírka$.presnosť$}"); }
Nová substitúcia funguje vo všetkých makrách, ktoré podporujú definíciu formátu reťazca, s výnimkou makra „panic!“. vo verziách jazyka Rust 2015 a 2018, v ktorých sa panika!("{ident}") považuje za bežný reťazec (vo verzii Rust 2021 náhrada funguje).
- Správanie štruktúry std::process::Command na platforme Windows bolo zmenené tak, že pri vykonávaní príkazov už z bezpečnostných dôvodov nehľadá spustiteľné súbory v aktuálnom adresári. Aktuálny adresár je vylúčený, pretože by sa mohol použiť na spustenie škodlivého kódu, ak sú programy spustené v nedôveryhodných adresároch (CVE-2021-3013). Nová logika detekcie spustiteľného súboru zahŕňa prehľadávanie adresárov Rust, adresára aplikácie, systémového adresára Windows a adresárov špecifikovaných v premennej prostredia PATH.
- Štandardná knižnica rozšírila počet funkcií označených „#[must_use]“, aby vydala varovanie, ak je návratová hodnota ignorovaná, čo pomáha identifikovať chyby spôsobené predpokladom, že funkcia zmení hodnoty namiesto toho, aby vrátila novú hodnotu.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- Metadáta::je_symlink
- Cesta::je_symlink
- {integer}::saturating_div
- Option::unwrap_unchecked
- Výsledok::unwrap_unchecked
- Výsledok::unwrap_err_unchecked
- Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa vo funkciách:
- Trvanie::nové
- Trvanie::checked_add
- Duration::saturating_add
- Trvanie::checked_sub
- Trvanie::saturating_sub
- Trvanie::checked_mul
- Trvanie::saturating_mul
- Trvanie::checked_div
- Povolené dereferencovanie ukazovateľov "*const T" v kontextoch "const".
- V správcovi balíkov Cargo bolo do metadát balíka pridané pole rust_version a do príkazu „cargo install“ bola pridaná možnosť „--message-format“.
- Kompilátor implementuje podporu pre ochranný mechanizmus CFI (Control Flow Integrity), ktorý pridáva kontroly pred každým nepriamym volaním na zistenie niektorých foriem nedefinovaného správania, ktoré by potenciálne mohlo viesť k porušeniu normálneho vykonávacieho príkazu (kontrolného toku) v dôsledku používanie exploitov, ktoré menia ukazovatele uložené v pamäti na funkcie.
- Kompilátor pridal podporu pre verzie 5 a 6 formátu porovnávania pokrytia LLVM, ktorý sa používa na vyhodnotenie pokrytia kódu počas testovania.
- V kompilátore sú požiadavky na minimálnu verziu LLVM zvýšené na LLVM 12.
- Bola implementovaná tretia úroveň podpory pre platformu x86_64-unknown-none. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania, zverejňovania oficiálnych verzií alebo kontroly, či je možné kód zostaviť.
Okrem toho si môžeme všimnúť publikáciu spoločnosti Microsoft o vydaní knižníc Rust pre Windows 0.30, ktoré vám umožňujú používať jazyk Rust na vývoj aplikácií pre OS Windows. Sada obsahuje dva balíčky prepraviek (windows a windows-sys), cez ktoré sa dostanete k Win API v programoch Rust. Kód pre podporu API sa generuje dynamicky z metadát popisujúcich API, čo umožňuje implementovať podporu nielen pre existujúce volania Win API, ale aj pre volania, ktoré sa objavia v budúcnosti. Nová verzia pridáva podporu pre cieľovú platformu UWP (Universal Windows Platform) a implementuje typy Handle a Debug.
Zdroj: opennet.ru