publikovaný vydanie 1.45 systémového programovacieho jazyka Hrdza, ktorú založil projekt Mozilla. Jazyk sa zameriava na bezpečnosť pamäte, poskytuje automatickú správu pamäte a poskytuje nástroje na dosiahnutie vysokého paralelizmu úloh bez použitia zberača odpadu a runtime.
Automatická správa pamäte Rust eliminuje chyby pri manipulácii s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencie nulového ukazovateľa, pretečenie vyrovnávacej pamäte atď. Vyvíja sa správca balíkov na distribúciu knižníc, zabezpečenie zostavenia a správu závislostí v rámci projektu. náklad, čo vám umožní získať knižnice potrebné pre program jedným kliknutím. Hostiteľské knižnice podporujú úložisko crates.io.
Vyradené dlhodobo chyba pri vykonávaní konverzií medzi celými číslami a číslami s pohyblivou rádovou čiarkou. Keďže kompilátor Rust používa LLVM ako backend, operácie konverzie typu sa vykonávali prostredníctvom inštrukcií stredného kódu LLVM, ako napr. fptoui, ktoré majú jednu výraznú vlastnosť – nedefinované správanie, ak výsledná hodnota nezapadá do cieľového typu. Napríklad pri prevode float hodnoty 300 s typom f32 na celé číslo typu u8 je výsledok nepredvídateľný a môže sa líšiť v rôznych systémoch. Problém je v tom, že táto funkcia sa objavuje v kóde, ktorý nie je označený ako „nebezpečný“.
Od verzie Rust 1.45 je správanie pretečenia veľkosti typu prísne regulované a operácia konverzie „ako“ kontroluje pretečenie a vynúti prevádzanú hodnotu na maximálnu alebo minimálnu hodnotu cieľového typu (v príklade vyššie je to hodnota 300 by sa premenilo na 255). Na vypnutie takýchto kontrol sú k dispozícii dodatočné volania API „{f64, f32}::to_int_unchecked“, ktoré fungujú v nebezpečnom režime.
fn cast(x: f32) -> u8 {
x ako u8
}
fnmain() {
let too_big = 300.0;
nech je taky_maly = -100.0;
nech nan = f32::NAN;
println!("too_big_casted = {}", cast(too_big)); // výstup 255
println!("too_small_casted = {}", cast(too_small)); // výstup 0
println!("not_a_number_casted = {}", cast(nan)); // výstup 0
}
Používajte stabilizované procedurálne makráfunkčné výrazy, šablóny a príkazy. Predtým sa takéto makrá nedali volať všade, ale len v určitých častiach kódu (ako samostatné volanie, neprepletené s iným kódom). Rozšírenie spôsobu volania makier, podobne ako funkcie, bolo jednou z požiadaviek na fungovanie webového rámca Raketa v stabilných vydaniach Rust. Predtým si dosiahnutie dodatočnej flexibility pri definovaní manipulátorov v Rocket vyžadovalo povolenie experimentálnej funkcie s názvom „proc_macro_hygiene“, ktorá nie je dostupná v stabilných verziách Rust. Táto funkcia je teraz zabudovaná do stabilných verzií jazyka.
Je povolené používať rozsahy s typom „char“ na iteráciu hodnôt rozsahu (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
pre ch v 'a'..='z' {
print!("{}", ch);
}
println! (); // Vytlačí "abcdefghijklmnopqrstuvwxyz"
Nová časť API bola presunutá do stabilnej kategórie vrátane stabilizovaných
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Weak::as_ptr,
rc::Slabé::from_raw,
rc::Weak::into_raw,
str::prefix_stripu,
str::prípona_stripu,
sync::Weak::as_ptr,
synchronizácia::Slabá::from_raw,
sync::Weak::into_raw,
znak::UNICODE_VERSION,
Span::resolved_at,
Span::location_at,
Span::mixed_site,
unix::process::CommandExt::arg0.
Kompilátor rustc pridal podporu pre prepísanie rôznych funkcií cieľovej platformy pomocou príznaku „cieľová funkcia“, napríklad „-C cieľová funkcia=+avx2,+fma“. Boli pridané aj nové vlajky:
"force-unwind-tables" na generovanie unwind call tabuliek, bez ohľadu na stratégiu riešenia zlyhania; "embed-bitcode" na kontrolu, či je bitový kód LLVM zahrnutý do generovaných rlibs. Príznak „embed-bitcode“ je v Cargo predvolene povolený, aby sa optimalizoval čas zostavenia a spotreba miesta na disku.
Tretia úroveň podpory bola poskytnutá pre platformy mipsel-sony-psp a thumbv7a-uwp-windows-msvc. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania a zverejňovania oficiálnych verzií.
Okrem toho je možné poznamenať príbeh o vytvorení najjednoduchšieho aplikácie v jazyku Rust, pričom namiesto operačného systému začína používať zavádzač systému a je pripravený na samostatné načítanie.
Tento článok je prvým zo série venovanej demonštrácii techník, ktoré sú žiadané pri nízkoúrovňovom programovaní a vývoji OS.