Vydání programovacího jazyka Rust 1.37

zveřejněno vydání systémového programovacího jazyka Rez 1.37, kterou založil projekt Mozilla. 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.

Automatická správa paměti Rust osvobozuje vývojáře od manipulace s ukazateli a chrání před problémy vyplývajícími z manipulace s pamětí na nízké úrovni, jako jsou například přístupy k paměti po volném čase, dereference nulového ukazatele, přetečení vyrovnávací paměti a podobně. Vyvíjí se správce balíčků pro distribuci knihoven, zajištění sestavení a správu závislostí v rámci projektu. Náklad, což vám umožní získat knihovny, které potřebujete pro program, jedním kliknutím. Hostitelské knihovny podporují úložiště crates.io.

hlavní inovace:

  • V kompilátoru rustc zajištěno podpora optimalizace na základě výsledků profilování kódu (PGO, Profile-Guided Optimization),
    umožňuje generovat optimálnější kód na základě analýzy statistik nashromážděných během provádění programu. Pro generování profilu je poskytován příznak „-C profile-generate“ a pro použití profilu během sestavování – „-C profile-use“ (zpočátku je program sestaven s prvním příznakem, běží dokola a po vytvoření profil, je znovu smontován s druhým praporkem);

  • Při provádění příkazu „cargo run“, který je vhodné použít pro rychlé testování konzolových aplikací, byla přidána možnost automaticky vybrat spustitelný soubor ke spuštění, pokud je v balíčku několik spustitelných souborů. Výchozí soubor, který se má spustit, je určen direktivou default-run v sekci [package] s parametry balíčku, což vám umožňuje vyhnout se explicitnímu zadání názvu souboru pomocí příznaku „-bin“ pokaždé, když spustíte „cargo run“;
  • Příkaz „cargo vendor“, dříve dodávaný jako samostatný balíček. Příkaz umožňuje organizovat práci s lokální kopií závislostí - po provedení „cargo vendor“ se všechny zdrojové kódy závislostí projektu stáhnou z crates.io do místního adresáře, který pak lze použít pro práci bez přístupu k bednám. io (po provedení příkazu se zobrazí nápověda pro změnu konfigurace pro použití adresáře pro sestavení). Tato funkce se již používá k organizaci dodání kompilátoru rustc se zabalením všech závislostí do jednoho archivu s vydáním;
  • Nyní je možné vytvářet odkazy na možnosti výčtu pomocí aliasů typu (například v těle funkce „fn increment_or_zero(x: ByteOption) můžete zadat „ByteOption::None => 0“), konstrukce výpočtu typu (‹ MyType‹.. ››::option => N) nebo Self přístupy (v blocích c &self můžete zadat “Self::Quarter => 25”);
  • Přidána možnost vytvářet v makrech nepojmenované konstanty. Místo definování názvu prvku v "const" můžete nyní použít znak "_" k dynamickému výběru neopakujícího se identifikátoru, čímž se vyhnete konfliktům jmen při opětovném volání makra;
  • Přidána možnost používat atribut "#[repr(align(N))" s výčty pomocí syntaxe podobné definici struktury AlignN‹T› se zarovnáním a poté pomocí AlignN‹MyEnum›;
  • Nová část API byla přesunuta do stabilní kategorie, včetně BufReader::buffer, BufWriter::buffer a
    Cell::from_mut,
    Cell::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Možnost::xor
    {i,u}{8,16,64,128,velikost}::reverse_bits, Wrapping::reverse_bits and
    slice::copy_within.

Navíc lze poznamenat začátek testování projekt Async-std, která nabízí asynchronní variantu standardní knihovny Rust (port knihovny std, ve které jsou všechna rozhraní nabízena v asynchronní verzi a jsou připravena k použití se syntaxí async/await).

Zdroj: opennet.ru

Přidat komentář