Vydání Rust 1.53. Google financuje přidání podpory Rust do jádra Linux

Bylo vydáno vydání programovacího jazyka Rust 1.53, který byl založen projektem Mozilla, ale nyní je vyvíjen pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečnou práci s pamětí, poskytuje automatickou správu paměti a nabízí prostředky pro dosažení vysokého paralelismu při vykonávání úloh, a to vše bez použití garbage collectoru a runtime (runtime se omezuje na základní inicializaci a správu standardní knihovny).

Automatická správa paměti v Rust zbavuje vývojáře chyb při manipulaci s ukazateli a chrání před problémy vyplývajícími z nízkoúrovňové práce s pamětí, jako je přístup do oblasti paměti po jejím uvolnění, dereference nulových ukazatelů, překročení hranice bufferu atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí se vyvíjí balíčkový manažer Cargo. Pro umístění knihoven je podporován repozitář crates.io.

Hlavní novinky:

  • Pro pole byl implementován trait IntoIterator, který umožňuje iteraci přes prvky pole podle hodnot: for i in [1, 2, 3] { .. }

    Také byla přidána možnost předávat pole do metod, které přijímají iterátory, například: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Dříve byl IntoIterator implementován pouze pro odkazy na pole, tj. pro iteraci po hodnotách bylo třeba použít odkazy („&[1, 2, 3]“) nebo „[1, 2, 3].iter()“. Implementaci IntoIterator pro pole komplikovaly problémy s kompatibilitou, způsobené dříve přidanou konverzí metody array.into_iter() na (&array).into_iter(). Tyto problémy se podařilo vyřešit obchvatem — kompilátor bude pokračovat v konverzi array.into_iter() na (&array).into_iter(), jako by nebyla implementace traitu IntoIterator, ale pouze při volání metody se syntaxí „.into_iter()“ a nedotýkající se volání ve formě „in [1, 2, 3]“, „iter.zip([1, 2, 3])“, „IntoIterator::into_iter([1, 2, 3])“.

  • Byla poskytnuta možnost uvádění výrazů „|“ (logická operace OR) v jakékoli části vzoru, například místo „Some(1) | Some(2)“ nyní lze psát „Some(1 | 2)“: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Použití ne-ASCII znaků v identifikátorech je povoleno, včetně všech národních znaků definovaných ve specifikaci Unicode UAX 31, kromě emoji znaků. Při použití různých, ale podobných znaků, kompilátor vyhodí varování. const BLÅHAJ: &str = „🦈“; struct 人 { 名字: String, } let α = 1; let sos = 2; warning: identifier pair considered confusable between ‘s’ and ‘s’
  • Nová várka API byla převedena do kategorie stabilních verzí, včetně stabilizace:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duration::ZERO
    • Duration::MAX
    • Duration::is_zero
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator pro pole
    • {integer}::BITS
    • io::Error::Unsupported
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Option::insert
    • Ordering::is_eq
    • Ordering::is_ne
    • Ordering::is_lt
    • Ordering::is_gt
    • Ordering::is_le
    • Ordering::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> pro slice::IterMut
    • impl SliceIndex pro (Bound<usize>, Bound<usize>)
    • Vec::extend_from_within
  • Byl zaveden třetí level podpory pro platformu wasm64-unknown-unknown. Třetí level znamená základní podporu, ale bez automatizovaného testování, publikace oficiálních verzí a ověření možnosti sestavení kódu.
  • Správce balíčků Cargo byl převeden na používání názvu „main“ pro hlavní větev Git repozitáře (HEAD). Pro závislosti umístěné v repositářích, které používají název main místo master, již není potřeba uvádět v nastavení branch = „main“.
  • Požadavky na minimální verzi LLVM v kompilátoru byly zvýšeny na LLVM 10.

Dále stojí za zmínku poskytnutí financování pro vývoj integrace do jádra Linux nástrojů pro vývoj komponent v jazyce Rust. Práce bude probíhat v rámci projektu Prossimo pod záštitou organizace ISRG (Internet Security Research Group), která je zakladatelem projektu Let’s Encrypt a podporuje propagaci HTTPS a rozvoj technologií pro zvyšování bezpečnosti internetu. Finanční prostředky budou poskytnuty společností Google, která zaplatí práci Miguela Oheda (Miguel Ojeda), autora projektu Rust-for-Linux. Dříve ISRG a Google již financovaly vytvoření alternativního HTTP backendu pro nástroj curl a vývoj nového TLS modulu pro http server Apache.

Podle údajů společností Microsoft a Google přibližně 70 % zranitelností vyplývá z nebezpečného zacházení s pamětí. Předpokládá se, že použití jazyka Rust pro vývoj komponentů jádra, jako jsou ovladače zařízení, sníží riziko vzniku zranitelností způsobených nebezpečným zacházením s pamětí a vyloučí vznik chyb, jako je přístup do paměti po jejím uvolnění a přetečení bufferu.

Bezpečná práce s pamětí je zajištěna v Rustu během kompilace prostřednictvím kontroly odkazů, sledování vlastnictví objektů a zohlednění doby života objektů (oblastí viditelnosti), stejně jako hodnocením správnosti přístupu k paměti během vykonávání kódu. Rust také poskytuje prostředky k ochraně před přetečením celočíselných hodnot, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, aplikuje koncept neměnnosti (immutable) odkazů a proměnných ve výchozím nastavení, a nabízí silnou statickou typizaci pro minimalizaci logických chyb.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster