Vydání programovacího jazyka Rust 1.64

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.64, 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:

  • Byly zvýšeny požadavky na linuxové prostředí v kompilátoru, správci balíčků Cargo a standardní knihovně libstd – minimální požadavky na Glibc byly zvýšeny z verze 2.11 na 2.17 a linuxové jádro z verze 2.6.32 na 3.2. Omezení platí také pro spustitelné soubory aplikací Rust vytvořené pomocí libstd. Distribuční sady RHEL 7, SLES 12-SP5, Debian 8 a Ubuntu 14.04 splňují nové požadavky. Podpora pro RHEL 6, SLES 11-SP4, Debian 7 a Ubuntu 12.04 bude ukončena. Uživatelé, kteří používají spustitelné soubory Rust-built v prostředích se starším linuxovým jádrem, se vyzývají, aby upgradovali své systémy, zůstali na starších verzích kompilátoru nebo udržovali vlastní větev libstd s vrstvami, aby byla zachována kompatibilita.

    Jedním z důvodů ukončení podpory starších systémů Linux jsou omezené zdroje na zachování kompatibility se staršími prostředími. Podpora pro starší Glibc vyžaduje použití starších nástrojů při kontrole v systému kontinuální integrace, tváří v tvář rostoucím požadavkům na verze v LLVM a utilitách pro křížovou kompilaci. Zvýšení požadavků na verzi jádra je způsobeno schopností používat nová systémová volání v libstd bez nutnosti udržovat vrstvy, aby byla zajištěna kompatibilita se staršími jádry.

  • Byla stabilizována vlastnost IntoFuture, která se podobá IntoIterator, ale liší se od posledně jmenovaného použitím smyček „.wait“ namísto „for ... in ...“. V kombinaci s IntoFuture může klíčové slovo „.await“ očekávat nejen vlastnost budoucnosti, ale také jakékoli jiné typy, které lze převést na budoucnost.
  • Nástroj analyzátor rzi je součástí kolekce utilit dodávaných s verzemi Rust. Nástroj je také dostupný pro instalaci pomocí rustup (komponenta rustup přidat analyzátor rzi).
  • Správce balíčků Cargo zahrnuje dědičnost pracovního prostoru, aby se eliminovala duplikace společných hodnot polí mezi balíčky, jako jsou verze Rust a adresy URL úložiště. Také přidána podpora pro vytváření pro několik cílových platforem najednou (nyní můžete zadat více než jeden parametr ve volbě „--target“).
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • budoucnost::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Typy kompatibilní s C, dříve stabilizované v modulu std::ffi, byly přidány do jádra a knihovny alloc:
    • jádro::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Typy C dříve stabilizované v modulu std::os::raw byly přidány do modulů core::ffi a std::ffi (například typy c_uint a c_ulong byly navrženy pro typy C uint a ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Nízkoúrovňové manipulátory byly stabilizovány pro použití s ​​mechanismem Poll (v budoucnu se plánuje poskytovat zjednodušené API, které nevyžaduje použití nízkoúrovňových struktur, jako je Pull and Pin):

    • budoucnost::poll_fn
    • úkol::připraveno!
  • Atribut „const“, který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá ve funkci slice::from_raw_parts.
  • Za účelem kompaktnějšího ukládání dat bylo změněno rozložení paměti struktur Ipv4Addr, Ipv6Addr, SocketAddrV4 a SocketAddrV6. Může nastat problém s kompatibilitou s balíčky s jednou bednou, které používají std::mem::transmute pro nízkoúrovňovou manipulaci se strukturami.
  • Sestavení kompilátoru rust pro platformu Windows využívá optimalizace PGO (profile-guided optimization), které umožnily zvýšit výkon kompilace kódu o 10-20 %.
  • Kompilátor implementoval nové upozornění na nepoužívaná pole v určitých strukturách.

Kromě toho si můžete povšimnout zprávy o stavu vývoje alternativní implementace překladače jazyka Rust, připravené projektem gccrs (GCC Rust) a schválené pro zahrnutí do GCC. Po integraci frontendu lze standardní nástroje GCC použít ke kompilaci programů v jazyce Rust bez nutnosti instalace kompilátoru rustc vytvořeného pomocí vývoje LLVM. Dokud bude vývoj na dobré cestě a pokud nebudou nějaké nepředvídatelné problémy, bude frontend Rust integrován do vydání GCC 13 plánovaného na květen příštího roku. Implementace Rust GCC 13 bude ve stavu beta, ve výchozím nastavení ještě není povolena.

Zdroj: opennet.ru

Přidat komentář