Vydání programovacího jazyka Rust 1.60

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.60, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečnost paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Metody zpracování paměti Rust šetří vývojáře před chybami při manipulaci s ukazateli a chrání před problémy, které vznikají v důsledku nízkoúrovňového zpracování paměti, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, poskytování sestavení 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.

Bezpečnost paměti je v Rustu zajištěna v době kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, sledování životnosti objektů (rozsahů) a hodnocení správnosti přístupu do paměti během provádění kódu. Rust také poskytuje ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.

Hlavní inovace:

  • Kompilátor rustc má stabilizovaný systém založený na LLVM pro generování dat pokrytí používaných k vyhodnocení pokrytí kódu během testování. Chcete-li povolit data pokrytí během sestavování, musíte použít příznak „-Cinstrument-coverage“, například spuštěním sestavy příkazem „RUSTFLAGS=“-C instrument-coverage“ sestavování nákladu“. Po spuštění takto zkompilovaného spustitelného souboru se do aktuálního adresáře uloží soubor default.profraw, ke kterému můžete použít utilitu llvm-profdata z komponenty llvm-tools-preview. Výstup zpracovaný llvm-profdata lze poté předat llvm-cov, aby se vygenerovala anotovaná zpráva o pokrytí kódu. Informace o odkazu na zdrojový kód je převzata ze zkoumaného spustitelného souboru, který obsahuje potřebné údaje o spojení mezi počítadly pokrytí a kódem. 1| 1|fn main() { 2| 1| println!("Ahoj světe!"); 3| 1|}
  • Ve správci cargo balíčků byla stabilizována podpora pro příznak „-timings“, který zahrnuje generování podrobné zprávy o průběhu sestavení a době provádění každého kroku. Zpráva může být užitečná pro optimalizaci výkonu procesu sestavování.
  • Správce balíčků cargo nabízí novou syntaxi pro mechanismus podmíněné kompilace a výběru volitelných závislostí, konfigurovanou v souboru Cargo.toml uvedením seznamu pojmenovaných vlastností v sekci [features] a aktivovanou povolením vlastností během sestavování balíčku. pomocí příznaku „--features“. Nová verze přidává podporu pro závislosti v samostatných jmenných prostorech a slabé závislosti.

    V prvním případě je možné použít prvky s předponou „dep:“ uvnitř sekce „[features]“ k explicitnímu propojení s volitelnou závislostí, aniž by byla tato závislost implicitně reprezentována jako vlastnost. Ve druhém případě byla přidána podpora pro označení znakem “?”. ("package-name?/feature-name") volitelné závislosti, které by měly být zahrnuty pouze v případě, že nějaká jiná vlastnost zahrnuje danou volitelnou závislost. Například v níže uvedeném příkladu povolení vlastnosti serde povolí závislost "serde" stejně jako vlastnost "serde" pro závislost "rgb", ale pouze pokud je závislost "rgb" povolena jinde: [dependencies] serde = { verze = " 1.0.133", volitelné = true } rgb = { verze = "0.8.25", volitelné = true } [funkce] serde = ["dep:serde", "rgb?/serde"]

  • Byla vrácena podpora pro přírůstkovou kompilaci, která byla v posledním vydání zakázána. Chyba kompilátoru, která způsobila deaktivaci funkce, byla vyřešena.
  • Byly vyřešeny některé problémy s poskytováním okamžitých časovačů se zárukou monotónního časování, které zohledňuje čas strávený systémem v režimu spánku. Dříve bylo pro obsluhu časovače vždy, když to bylo možné, využíváno OS API, které nezohledňovalo problematické situace narušující monotónnost času, jako jsou hardwarové problémy, použití virtualizace nebo chyby v operačním systému.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • plátek::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • use::abs_diff
    • Displej pro io::ErrorKind
    • Od do ExitCode
    • Ne pro ! (zadejte "nikdy")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Třetí úroveň podpory byla implementována pro platformy mips64-openwrt-linux-musl* a armv7-unknown-linux-uclibceabi (softfloat). 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.
  • Kompilátor byl přepnut na LLVM 14.

Kromě toho si můžete poznamenat:

  • Přidána podpora pro bootstrapping kompilátoru rustc pomocí backendu rustc_codegen_gcc, který umožňuje používat knihovnu libgccjit z projektu GCC jako generátor kódu v rustc, což umožňuje rustc poskytovat podporu pro architektury a optimalizace dostupné v GCC. Propagace kompilátoru znamená možnost použít generátor kódu založený na GCC v rustc k sestavení samotného kompilátoru rustc. Z praktického hlediska vám tato funkce umožňuje vytvářet programy rust pro architektury, které dříve nebyly podporovány v rustc.
  • K dispozici je vydání sady nástrojů uutils coreutils 0.0.13, v rámci které se vyvíjí obdoba balíčku GNU Coreutils přepsaná do jazyka Rust. Coreutils přichází s více než stovkou nástrojů, včetně sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. Cílem projektu je vytvořit multiplatformní alternativní implementaci Coreutils, schopnou běžet na platformách Windows, Redox a Fuchsia a také distribuci pod permisivní licencí MIT namísto licence GPL copyleft.

    Nová verze zlepšila implementace mnoha utilit, včetně výrazně vylepšené kompatibility utilit cp, dd, df, split a tr s jejich protějšky z projektu GNU. Poskytovaná online dokumentace. Analyzátor clap se používá k analýze argumentů příkazového řádku, což zlepšilo výstup pro příznak „--help“ a přidala podporu pro zkratky dlouhých příkazů (například můžete zadat „ls -col“ místo „ls -color “).

Zdroj: opennet.ru

Přidat komentář