Vydání programovacího jazyka Rust 1.45

zveřejněno vydání 1.45 systémového programovacího jazyka Rezzaložil projekt Mozilla. Jazyk se zaměřuje na bezpečnou správu paměti, poskytuje automatickou správu 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.

Automatická správa 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é manipulace s pamětí, 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, zajištění sestavení a správu závislostí projekt vyvíjí správce balíčků 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.

hlavní inovace:

  • Vyřazeno dlouhodobě vada při provádění převodů mezi celými čísly a čísly s plovoucí desetinnou čárkou. Vzhledem k tomu, že kompilátor Rust používá LLVM jako backend, operace převodu typu byly prováděny prostřednictvím instrukcí středního kódu LLVM, jako je např. fptoui, které mají jednu významnou vlastnost - nedefinované chování, pokud výsledná hodnota nezapadá do cílového typu. Například při převodu plovoucí hodnoty 300 s typem f32 na celé číslo typu u8 je výsledek nepředvídatelný a může se lišit v různých systémech. Problém je v tom, že tato funkce se objevuje v kódu, který není označen jako „nebezpečný“.

    Od verze Rust 1.45 je chování přetečení velikosti typu přísně regulováno a operace převodu „jako“ kontroluje přetečení a nutí převáděnou hodnotu na maximální nebo minimální hodnotu cílového typu (pro příklad výše hodnotu 300 by bylo převedeno na 255). Chcete-li takové kontroly zakázat, jsou k dispozici další volání API „{f64, f32}::to_int_unchecked“, která fungují v nebezpečném režimu.

    fn cast(x: f32) -> u8 {
    x jako u8
    }

    fn main() {
    let too_big = 300.0;
    let too_small = -100.0;
    nechť nan = f32::NAN;

    nechť x: f32 = 1.0;
    nechť y: u8 = unsafe { x.to_int_unchecked() };

    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žijte stabilizovaný procedurální makrafunkční výrazy, šablony a příkazy. Dříve se taková makra nedala volat všude, ale jen v určitých částech kódu (jako samostatné volání, nepropletené s jiným kódem). Rozšíření způsobu volání maker, podobně jako u funkcí, bylo jedním z požadavků, aby webový framework fungoval Raketa ve stabilních vydáních Rust. Dříve bylo dosažení další flexibility při definování ovladačů v Rocketu vyžadováno povolením experimentální funkce nazvané „proc_macro_hygiene“, která není dostupná ve stabilních verzích Rust. Tato funkce je nyní zabudována do stabilních verzí jazyka.
  • Je povoleno používat rozsahy s typem „char“ k iteraci hodnot rozsahu (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    pro ch v 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // Vytiskne "abcdefghijklmnopqrstuvwxyz"

  • Nová část API byla převedena do kategorie stabilních, včetně stabilizovaných
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Slabý::as_ptr,
    rc::Slabý::from_raw,
    rc::Slabý::into_raw,
    str::prefix_stripu,
    str::přípona_stripu,
    sync::Weak::as_ptr,
    synchronizace::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 přidal podporu pro přepsání různých funkcí cílové platformy pomocí příznaku "target-feature", například "-C target-feature=+avx2,+fma". Byly také přidány nové vlajky:
    "force-unwind-tables" pro generování unwind call tabulek, bez ohledu na strategii řešení havárií; "embed-bitcode" pro kontrolu, zda je bitkód LLVM zahrnut do generovaných rlibs. Příznak „embed-bitcode“ je v Cargo standardně povolen, aby se optimalizovala doba sestavení a spotřeba místa na disku.

  • Třetí úroveň podpory byla poskytnuta pro platformy mipsel-sony-psp a thumbv7a-uwp-windows-msvc. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování a publikování oficiálních sestavení.

Navíc lze poznamenat příběh o vytvoření toho nejjednoduššího aplikace v jazyce Rust, počínaje používáním zavaděče systému a připraveného k samostatnému načítání namísto operačního systému.
Článek je prvním ze série věnované demonstraci technik, které jsou žádané v nízkoúrovňovém programování a vývoji OS.

Zdroj: opennet.ru

Přidat komentář