Vydanie programovacieho jazyka Rust 1.64

Bol vydaný univerzálny programovací jazyk Rust 1.64, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).

Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.

Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.

Hlavné inovácie:

  • Zvýšili sa požiadavky na linuxové prostredie v kompilátore, správcovi balíkov Cargo a štandardnej knižnici libstd – minimálne požiadavky pre Glibc sa zvýšili z verzie 2.11 na 2.17 a linuxové jadro z verzie 2.6.32 na 3.2. Obmedzenia sa vzťahujú aj na spustiteľné súbory aplikácií Rust vytvorené pomocou libstd. Distribučné súpravy RHEL 7, SLES 12-SP5, Debian 8 a Ubuntu 14.04 spĺňajú nové požiadavky. Podpora pre RHEL 6, SLES 11-SP4, Debian 7 a Ubuntu 12.04 bude ukončená. Používatelia, ktorí používajú spustiteľné súbory vytvorené v Rust v prostrediach so starším jadrom Linuxu, sa vyzývajú, aby upgradovali svoje systémy, zostali na starších vydaniach kompilátora alebo udržiavali svoju vlastnú vidlicu libstd s vrstvami, aby si zachovali kompatibilitu.

    Jedným z dôvodov ukončenia podpory pre staršie systémy Linux sú obmedzené zdroje na zachovanie kompatibility so staršími prostrediami. Podpora pre starší Glibc vyžaduje použitie starších nástrojov pri kontrole v systéme nepretržitej integrácie, vzhľadom na rastúce požiadavky na verzie v LLVM a pomocných programoch pre krížovú kompiláciu. Nárast požiadaviek na verziu jadra je spôsobený možnosťou používať nové systémové volania v libstd bez potreby udržiavať vrstvy, aby bola zabezpečená kompatibilita so staršími jadrami.

  • Bola stabilizovaná vlastnosť IntoFuture, ktorá sa podobá na IntoIterator, ale líši sa od neho používaním slučiek „.wait“ namiesto „for ... in ...“. V kombinácii s IntoFuture môže kľúčové slovo „.wait“ očakávať nielen vlastnosť Budúcnosti, ale aj akékoľvek iné typy, ktoré možno previesť na Budúcnosť.
  • Pomôcka na analýzu hrdze je súčasťou kolekcie pomôcok poskytovaných s vydaniami Rust. Nástroj je dostupný aj pre inštaláciu pomocou rustup (komponent rustup pridať analyzátor hrdze).
  • Správca balíkov Cargo zahŕňa dedenie pracovného priestoru, aby sa eliminovala duplicita bežných hodnôt polí medzi balíkmi, ako sú verzie Rust a adresy URL úložiska. Tiež pridaná podpora pre vytváranie pre niekoľko cieľových platforiem naraz (teraz môžete zadať viac ako jeden parameter vo voľbe „--target“).
  • Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
    • budúcnosť::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, predtým stabilizované v module std::ffi, boli pridané do jadra a knižnice alloc:
    • jadro::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Typy C predtým stabilizované v module std::os::raw boli pridané do modulov core::ffi a std::ffi (napríklad typy c_uint a c_ulong boli navrhnuté pre 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 boli stabilizované pre použitie s mechanizmom Poll (v budúcnosti sa plánuje poskytovanie zjednodušeného API, ktoré nevyžaduje použitie nízkoúrovňových štruktúr, ako je Pull and Pin):

    • budúcnosť::poll_fn
    • úloha::pripravený!
  • Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa vo funkcii slice::from_raw_parts.
  • V záujme kompaktnejšieho ukladania údajov sa zmenilo rozloženie pamäte štruktúr Ipv4Addr, Ipv6Addr, SocketAddrV4 a SocketAddrV6. Môže sa vyskytnúť problém s kompatibilitou s balíkmi s jednou prepravkou, ktoré používajú std::mem::transmute na manipuláciu so štruktúrami na nízkej úrovni.
  • Zostavenie kompilátora hrdze pre platformu Windows využíva optimalizácie PGO (profile-guided optimization), ktoré umožnili zvýšiť výkon kompilácie kódu o 10-20 %.
  • Kompilátor implementoval nové upozornenie na nepoužívané polia v určitých štruktúrach.

Okrem toho si môžete všimnúť správu o stave vývoja alternatívnej implementácie kompilátora jazyka Rust, pripravenú projektom gccrs (GCC Rust) a schválenú na zahrnutie do GCC. Po integrácii frontendu je možné použiť štandardné nástroje GCC na kompiláciu programov v jazyku Rust bez potreby inštalácie kompilátora rustc, vytvoreného pomocou vývoja LLVM. Pokiaľ bude vývoj na dobrej ceste a ak nedôjde k žiadnym nepredvídaným problémom, bude frontend Rust integrovaný do vydania GCC 13 naplánovaného na máj budúceho roka. Implementácia GCC 13 Rust bude v beta stave, zatiaľ nie je predvolene povolená.

Zdroj: opennet.ru

Pridať komentár