Rust 1.35

Tím vývojářů Rust s potěšením představuje novou verzi svého jazyka: 1.35. Rust je programovací jazyk, který umožňuje psát spolehlivé a efektivní programy.

Pokud máte Rust již nainstalován pomocí rustup, můžete se aktualizovat následujícím příkazem:
$ rustup update stable

Hlavním bodem této aktualizace je realizace traitů uzávěrů Fn, FnOnce, FnMut pro Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, respektive. Byla přidána možnost převádět uzávěry na ukazatele na nebezpečné funkce, volání makra dbg!() je nyní možné bez argumentů, stabilizovala se standardní knihovna.

K detailům:

  • V nové verzi byly přidány implementace traitů Fn, FnOnce, FnMut pro Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, respektive.
    Nyní tento kód bude fungovat:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Dále je možné volat uzávěr přímo z Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
    x()
    }

  • Nyní lze uzávěry převádět na ukazatele na unsafe fn.
    Nyní je tento kód platný:
    /// The safety invariants are those of the `unsafe fn` pointer passed.
    unsafe fn call_unsafe_fn_ptr(f: unsafe fn()) {
    f()
    }

    fn main() {
    // SAFETY: There are no invariants.
    // The closure is statically prevented from doing unsafe things.
    unsafe {
    call_unsafe_fn_ptr(|| {
    dbg!();
    });
    }
    }

  • Byla přidána možnost volání makra dbg!() bez argumentů.
    Pokud tomuto makru předáte nějaký výraz, makro vytiskne jeho výsledek. Příklad:
    fn main() {
    let mut x = 0;

    if dbg!(x == 1) {
    x += 1;
    }

    dbg!(x);
    }

    Při spuštění tohoto kódu uvidíte:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0

    Nyní můžete napsat takto:
    fn main() {
    let condition = true;

    if condition {
    dbg!();
    }
    }

    Při provádění tohoto kódu uvidíte:
    [src/main.rs:5]

  • Byly stabilizovány některé části standardní knihovny.
    • Nové metody pro f32 a f64:
      • f32::copysign
      • f64::copysign

      Tato funkce kopíruje znaménko z jiného čísla. Příklad:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Byly přidány nové metody pro typy Range.
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      S těmito metodami lze snadno zkontrolovat, zda se konkrétní hodnota nachází v sekvenci:
      fn main() {
      if (0..=10).contains(&5) {
      println!("Pět je zahrnuto mezi nulou a deseti.");
      }
      }

    • Úplný seznam stabilizovaných API najdete. tu
  • V této aktualizaci byl do Clippy (to je program, který kontroluje váš kód na mnoho chyb) přidán nový kontrolní mechanismus pro drop_bounds. Tento mechanismus se aktivuje, když vložíte omezení: T: Drop — pro generické funkce:
    fn foo<T: Drop>(x: T) {}

    Mít omezení T: Drop je většinou chybou, neboť tím se vylučují určité typy jako například u8. (Více o tom můžete číst) tu)

  • Veľa vylepšení a opráv bolo vykonaných v Cargo (správca balíkov jazyka), kompletný zoznam zmien

Zdroj: linux.org.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