Vydanie programovacieho jazyka Rust 1.58

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

Pridať komentár