Vydání programovacího jazyka Rust 1.57

Bylo zveřejněno vydání systémového programovacího jazyka Rust 1.57, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečnost paměti, poskytuje automatickou správu paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh bez použití garbage collectoru nebo runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Automatická správa paměti Rust eliminuje chyby při manipulaci s ukazateli a chrání před problémy vyplývajícími z manipulace s pamětí na nízké úrovni, jako je přístup k oblasti paměti po jejím uvolnění, dereference nulového ukazatele, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, zajištění sestavování a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.

Hlavní inovace:

  • Používání makra „panika!“ bylo stabilizováno. v kontextech vytvořených během kompilace, jako jsou deklarace "const fn". Navíc kromě použití "panice!" deklarace const umožňují použití makra „assert!“. a některé další standardní knihovny API. Stabilizace ještě nepokrývá celou formátovací infrastrukturu, takže v současné podobě makro „panika!“ lze použít pouze se statickými řetězci (panic!(“...")) nebo s jednou interpolovanou hodnotou "&str" při dosazování (panic!("{}", a)), což by mělo být omezeno na nahrazení "{ }" bez specifikátorů formátování a dalších typů. V budoucnu se použitelnost maker v konstantních kontextech rozšíří, ale stabilizované schopnosti jsou již dostatečné k provádění kontrol ve fázi kompilace: const _: () = sustain!(std::mem::size_of:: () == 64); const _: () = tvrdit!(std::mem::velikost_of:: () == 8);
  • Správce balíčků Cargo umožňuje použití profilů s libovolnými názvy, neomezujícími se na „dev“, „release“, „test“ a „bench“. Chcete-li například povolit optimalizaci ve fázi propojování (LTO) pouze při generování finálních produktových sestav, můžete v Cargo.toml vytvořit „produkční“ profil a přidat k němu příznak „lto = true“. Při definování vlastních profilů však musíte zadat existující profil, abyste z něj zdědili výchozí nastavení. Níže uvedený příklad vytváří profil „produkční“, který doplňuje profil „release“ zahrnutím příznaku „lto = true“. Samotný profil se aktivuje voláním cargo s volbou „--profile production“ a artefakty sestavy budou umístěny do adresáře „target/production“. [profile.production] inherits = "release" lto = true
  • Použití try_reserve pro typy Vec, String, HashMap, HashSet a VecDeque bylo stabilizováno, což umožňuje předem rezervovat prostor pro určitý počet prvků daného typu s cílem snížit frekvenci operací alokace paměti a vyhnout se havaruje během provozu kvůli nedostatku paměti.
  • Je povoleno specifikovat makra se složenými závorkami ve výrazech jako "m!{ .. }.method()" a "m!{ .. }?".
  • Spouštění funkcí File::read_to_end a read_to_string bylo optimalizováno.
  • Podpora specifikace Unicode byla aktualizována na verzi 14.0.
  • Byl rozšířen počet funkcí označených „#[must_use]“, aby se zobrazilo varování, pokud je vrácená hodnota ignorována, což pomáhá identifikovat chyby způsobené za předpokladu, že funkce změní hodnoty místo toho, aby vrátila novou hodnotu.
  • Přidán experimentální backend pro generování kódu pomocí libgccjit.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kolekce::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_rezerva
    • Vec::try_reserve_exact
    • VecDeque::try_rezerva
    • VecDeque::try_reserve_exact
    • Iterátor::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Příkaz::get_program
    • Příkaz::get_args
    • Příkaz::get_envs
    • Příkaz::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut „const“, který určuje, zda jej lze použít v jakémkoli kontextu místo konstant, se používá ve funkci hint::unreachable_unchecked.
  • Třetí úroveň podpory byla implementována pro armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi a armv7a-kmc platformy solid_asp3-eabihf. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, publikování oficiálních sestavení nebo kontroly, zda lze kód sestavit.

Zdroj: opennet.ru

Přidat komentář