Vydanie Rust 1.88. Operačný systém Munal a nástroj rsched na Rust

Bol prišlo k vydaniu programovacieho jazyka všeobecného účelu Rust 1.88, ktorý bol vyvinutý projektom Mozilla a je teraz rozvíjaný pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečné spracovanie pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti vykonávania úloh, pričom sa zaobíde bez použitia garbage collectora a runtime (runtime sa obmedzuje na základnú inicializáciu a údržbu štandardnej knižnice).

Metódy práce s pamäťou v Rust zbavujú vývojára chýb pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú z nízkoúrovňovej práce s pamäťou, ako je prístup do oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, prekročenie hraníc bufra atď. Na distribúciu knižníc, zabezpečenie zostavy a správu závislostí sa vyvíja balíčkový manažér Cargo. Pre umiestnenie knižníc sa podporuje repozitár crates.io.

Bezpečné zaobchádzanie s pamäťou je v Rust zabezpečené už pri kompilácii prostredníctvom kontroly odkazov, sledovania vlastníctva objektov, zohľadňovania životnosti objektov (rozsah viditeľnosti) a posudzovania správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred celočíselnými pretečeniami, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolené a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.

Hlavné novinky:

  • Bola pridaná možnosť špecifikovať viacero výrazov „let“ v rámci podmienkových blokov „if“ a „while“ pomocou operátora „&&“ (logické AND). Výrazy „let“ môžu byť kombinované s boolean podmienkovými výrazmi. Premenné, ktoré sú deklarované v let-výrazoch, je možné použiť v nasledujúcich podmienkových výrazoch, ako aj v rámci blokov „if“ a „while“. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
  • Bola pridaná podpora písania „holých“ funkcií, označených atribútom „#[unsafe(naked)]“ a obsahujúcich jeden výskyt „naked_asm!“. Pri takto vytvorených funkciách chýba epilóg a prolog vygenerovaný kompilátorom, čo umožňuje vývojárovi úplne ovládať assemberový kód pripojený k funkcii („holá“ funkcia obsahuje iba assemberové inštrukcie, ktoré určil vývojár, a nezahŕňa špeciálne spracovateľské argumenty a návratové hodnoty pridané kompilátorom). „Holé“ funkcie sú považované za pohodlnejšiu alternatívu funkciám definovaným v bloku „global_asm!“. #[unsafe(naked)] pub unsafe extern „sysv64“ fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( „add rax, rdi, rsi“, „ret“ ); }
  • Do jazyka predikátov, ktorý sa používa v atribútoch podmienkovej kompilácie „cfg“ a „cfg_attr“ (umožňujú zapnúť alebo vypnúť časti kódu v závislosti od zadaných podmienok), bola pridaná podpora boolean literálov „true“ a „false“, ktoré sú identifikované s konfiguráciami, ktoré sú vždy zapnuté alebo vždy vypnuté. Tieto literály sa tiež môžu použiť v makre „cfg!“, ako aj v tabuľkách „[target]“ v manifestoch a konfiguráciách pre Cargo. Výrazy cfg(true) a cfg(false) môžu byť použité namiesto cfg(all()) a cfg(any()) na explicitnejšie vyjadrenie svojich úmyslov.
  • V balíkovom manažéri Cargo je zahrnuté automatické spúšťanie odstraňovača odpadu na vyčistenie cache v domovskom adresári používateľa. Predtým uchovávané balíky v cache so sťahovanými závislosťami neboli odstraňované, čo viedlo k neustálemu rastu spotreby diskového priestoru. Zapnutý mechanizmus odstraňovania odpadu automaticky odstráni stiahnuté crate súbory, na ktoré nebolo pristúpené viac ako 3 mesiace, a lokálne nainštalované crate súbory, na ktoré nebolo pristúpené viac ako mesiac. Vyčistenie cache sa nespúšťa pri používaní v crage s voľbami „—offline“ alebo „—frozen“.
  • Do oblasti stabilných bol prenesený nový balík API, vrátane stabilizovaných metód a implementácií traitov:
    • Cell::update
    • impl Default for *const T
    • impl Default for *mut T
    • mod ffi::c_str
    • HashMap::extract_if
    • HashSet::extract_if
    • hint::select_unpredictable
    • proc_macro::Span::line
    • proc_macro::Span::column
    • proc_macro::Span::start
    • proc_macro::Span::end
    • proc_macro::Span::file
    • proc_macro::Span::local_file
    • ::as_chunks
    • ::as_rchunks
    • ::as_chunks_unchecked
    • ::as_chunks_mut
    • ::as_rchunks_mut
    • ::as_chunks_unchecked_mut
  • Príznak „const“ bol použitý v funkciách:
    • NonNull::replace
    • ::replace
    • std::ptr::swap_nonoverlapping
    • Cell::replace
    • Cell::get
    • Cell::get_mut
    • Cell::from_mut
    • Cell::as_slice_of_cells
  • Bol prvý úroveň podpory cieľovej platformy i686-pc-windows-gnu.

Ďalšie je možné poznamenať s Rust súvisiace udalosti:

  • Projekt Munal OS vyvíja experimentálny operačný systém napísaný v Rust a založený na koncepcii unikernel. V Munal OS sa neuplatňuje preemptívna multitasking, mapovanie stránok pamäte a virtuálny adresový priestor (používa sa rozloženie pamäte od UEFI). Jadro a aplikácie bežia v jednom adresovom priestore s použitím bezpečnostného modelu založeného na sandboxovej izolácii WASM (súčasťou je engine wasmi na spúšťanie aplikácií v podobe bytekódu WebAssembly).

    Operačný systém je vybavený grafickým rozhraním a podporuje ovládanie cez klávesnicu a myš. Na vývoj grafických aplikácií sa používa vlastný toolkit s knižnicou widgetov. Na sieťovú interakciu sú ponúkané TCP stack a ovládač sieťového zariadenia. Medzi dostupné aplikácie pre Munal OS patrí: webový prehliadač so základnou podporou HTML a HTTPS, textový editor a terminál na vykonávanie kódu v Pythone. Kód je otvorený pod licenciou MIT.

    Vydanie Rust 1.88. Operačný systém Munal a nástroj rsched na Rust
  • Bol uvoľnený jadro Asterinas 0.15.2, napísané v jazyku Rust a poskytujúce ABI, kompatibilné s jadrom Linux. Jadro podporuje architektúry x86-64 a RISC-V a implementuje 206 zo 368 systémových volaní Linuxu. Na vývoji jadra sa podieľa 45 vývojárov, prevažne z rôznych čínskych univerzít. Jadro je postavené na architektúre „framekernel“, kde sú komponenty jadra umiestnené v spoločnom adresovom priestore a bezpečnosť sa dosahuje na úrovni logického delenia bezpečného kódu a kódu, v ktorom môže dôjsť k problémom s bezpečnosťou. Všetky systémové volania, súborové systémy a ovládače sú implementované na úrovni OS Services a nemôžu obsahovať bloky unsafe. Kód sa distribuuje pod licenciou MPL 2.0.
  • Pre jadro Linux bola pripravená utilita rsched, ktorá umožňuje analyzovať štatistiku o práci plánovača úloh. V praxi utilita umožňuje hodnotiť rozhodnutia plánovača týkajúce sa pridelovania zdrojov procesom, ako aj sledovať vznikajúce oneskorenia pri plánovaní. Pre zber údajov v jadre sa používa subsystém BPF, a nástroje bežiace v užívateľskom priestore sú napísané v jazyku Rust. Autorom utility je Chris Mason, tvorca a hlavný architekt súborového systému Btrfs.
  • Spoločnosť Collabora oznámila vývoj varianty nástroja Coccinelle pre jazyk Rust. Coccinelle bol pôvodne určený na automatizáciu vyhľadávania a transformácie kódu v jazyku C v jadre Linux. Transformácie sú definované vo forme pravidiel, ktoré pripomínajú abstrahované patche, nie sú viazané na konkrétne umiestnenie v kóde.
  • Vývojári GNOME predstavili knižnicu pre načítanie obrázkov glycin, napísanú v jazyku Rust, ktorá zabezpečuje dekódovanie obrázkov s použitím sandbox-izolácie. Podporuje sa poskytovanie dekódovaného obsahu prostredníctvom gdk::Textures a extrakcia metadát. Poskytujú sa obaly na využitie glycin v GTK4, ako aj backend na zapojenie glycin do knižnice GdkPixbuf, používané v GNOME na načítanie obrázkov. Glycin už je zapojený v prehliadači obrázkov Loupe, ktorý je v GNOME predvolene ponúkaný. Backend pre GdkPixbuf umožňuje využitie glycin v GNOME Shell, generátoroch miniatur a v rôznych aplikáciách GNOME bez zmeny týchto programov.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster