Vydání programovacího jazyka Rust 1.36

zveřejněno vydání systémového programovacího jazyka Rez 1.36, 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:

  • Vlastnost stabilizovaná Budoucnost, což představuje hodnotu, jejíž vyhodnocení ještě nemusí být dokončeno při použití bloků async / .await. Asynchronní hodnoty definované pomocí Future umožňují pokračovat v provádění užitečné práce ve vláknu a zároveň čekat na dokončení výpočtů určité hodnoty;
  • Knihovna stabilizovaná alokovat, který poskytuje inteligentní ukazatele a kolekce pro správu hodnot alokovaných v paměti. Alokace paměti v std nyní používá typ Věc, které jsou reexportovány z alok. Oddělené použití alloc má smysl v aplikacích, které nejsou vázány na std („#![no_std]”), stejně jako v knihovnách určených pro použití v podobných programech bez std;
  • Obejít kontroly správné inicializace hodnot navržený střední typ MožnáJednotka, kterou lze použít místo funkce mem::uninicialized jako bezpečnější alternativu. Funkce mem::uninitialized je vhodná pro rychlé vytváření polí, ale klame kompilátor, protože se zdá, že se inicializovala, ale ve skutečnosti zůstává hodnota neinicializovaná. MaybeUninit vám umožňuje explicitně oznámit kompilátoru, že hodnota není inicializována, vzít v úvahu možné nedefinované chování s tím spojené, a také organizovat kontroly v programech pomocí „možná_t:“ a inicializaci krok za krokem, označující její dokončení. pomocí volání „.assume_init()“. S příchodem MaybeUninit byla funkce mem::uninitialized zastaralá a její použití se nedoporučuje;
  • Pro jazyk Rust 2015 je stabilizována technika NLL (Non-Lexical Lifetimes), která rozšířila systém pro zaznamenávání doby životnosti vypůjčených proměnných (zpočátku byla NLL podporována pouze Rustem 2018). Namísto potvrzení životů na lexikální úrovni tak NLL dělá na úrovni sady ukazatelů v grafu toku provádění. Tento přístup umožňuje zvýšit kvalitu kontroly výpůjček proměnných (brow checker) a umožnit provedení některých typů správného kódu, jehož použití dříve vedlo k chybě. Nové chování také výrazně usnadňuje ladění;
  • Zahrnuta nová implementace asociativních polí HashMap, na základě aplikace struktury Švýcarský stůl (automaticky načteno hashbrown::HashMap, pokud není výslovně uvedeno jinak, jako je std::HashMap, která je založena na SipHash 1-3). Softwarové rozhraní zůstává stejné a rozdíly, které si vývojář všimne, se scvrkají na zvýšený výkon a sníženou spotřebu paměti;
  • Ve správci balíčků náklad přidal možnost „--offline“, která umožňuje provoz bez přístupu k síti, ve které se při instalaci závislostí používají pouze balíčky uložené v mezipaměti místního systému. Pokud závislost není v místní mezipaměti, bude vyvolána chyba. Chcete-li předem načíst závislosti do místní mezipaměti před přechodem do režimu offline, můžete použít příkaz „cargo fetch“;
  • Implementována schopnost volat makro „dbg!“ uvedení několika argumentů;
  • Pro metody se používá atribut „const“, který určuje možnost použití v libovolném kontextu místo konstant
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::visící a
    NonNull::cast;

  • Do kategorie stable byla převedena nová část API, včetně metod, které byly stabilizovány
    task::Waker, task::Anketa,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterátor::zkopírováno,
    BorrowMut (pro řetězce) a str::as_mut_ptr.

Zdroj: opennet.ru

Přidat komentář