zveřejněno vydání systémového programovacího jazyka Rez 1.38, 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.
Přidán režim zřetězené kompilace (zřetězený), ve kterém sestavení závislého balíčku bedny začíná, jakmile jsou k dispozici metadata závislosti, bez čekání na dokončení kompilace. Při kompilaci balíčku není nutné závislosti plně sestavovat, stačí definovat metadata, která zahrnují seznamy typů, závislostí a exportovaných prvků. Metadata jsou zpřístupněna brzy v procesu kompilace, takže propojené balíčky lze nyní zkompilovat mnohem dříve. Při sestavování jednotlivých balíčků nemá navrhovaný režim vliv na výkon, ale pokud sestava pokrývá balíčky s rozvětvenými závislostmi, lze celkovou dobu sestavování zkrátit o 10–20 %;
Zajišťuje detekci nesprávného použití funkcí std::mem::neinicializováno и std::mem::nulováno. Například std::mem::uninitialized je vhodný pro rychlé vytváření polí, ale uvádí kompilátor v omyl, protože se zdá být inicializovaný, ale ve skutečnosti zůstává hodnota neinicializovaná. Funkce mem::uninitialized je již označena jako zastaralá a doporučuje se místo ní použít přechodný typ MožnáJednotka. Pokud jde o mem::zeroed, tato funkce může způsobit problémy s typy, které nemohou přijmout nulové hodnoty.
Aby pomohla identifikovat nedefinované chování, přidává nové vydání do kompilátoru kontrolu lint, která detekuje některé problémy s mem::uninitialized nebo mem::zeroed. Nyní se například zobrazí chyba při pokusu o použití mem::uninicialized nebo mem::zeroed s typy &T a Box‹T›, které představují objekty ukazatele, které nemohou přijímat hodnoty null;
Atribut „#[deprecated]“ byl rozšířen, aby bylo možné označit balíčky přepravek za zastaralé a naplánovat jejich budoucí smazání. Od verze Rust 1.38 lze tento atribut použít také pro makra;
Přidána možnost používat atribut „#[global_allocator]“ v submodulech;
Funkce přidána std::any::název_typu, která vám umožní zjistit název typu, což může být užitečné pro účely ladění. Například během provádění programu můžete zjistit, pro jaký typ byla funkce volána:
slice::{concat, connect, join} nyní může mít kromě &T; hodnotu &[T];
"*const T" a "*mut T" nyní implementují marker::Unpin;
„Arc‹[T]›“ a „Rc‹[T]›“ nyní implementují FromIterator‹T›;
iter::{StepBy, Peekable, Take} nyní implementují DoubleEndedIterator.
ascii::EscapeDefault implementuje klonování a zobrazení.
Do kategorie stable byla převedena nová část API, včetně metod, které byly stabilizovány
‹*const T›::cast, ‹*mut T›::cast,
Délka::as_secs_f{32|64},
Duration::div_duration_f{32|64},
Duration::div_f{32|64},
Délka::from_secs_f{32|64},
Délka::mul_f{32|64},
operace divize se zbytkem
div_euclid a rem_euclid pro všechna celočíselná primitiva;
Přidána podpora pro vícenásobné specifikování možnosti „--features“ pro povolení různých funkcí ve správci nákladních balíčků;
Kompilátor poskytuje třetí úroveň podpora pro cílové platformy aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc cíle, armlinv7-unknown-armlinv7-unknown -gnueabi, armv32-unknown-linux-musleabi, hexagon-unknown-linux-musl a riscvXNUMXi-unknown-none-elf. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování a publikování oficiálních sestavení.