Rust 1.35

A Rust fejlesztőcsapata örömmel mutatja be a nyelv új verzióját: 1.35. A Rust egy programozási nyelv, amely megbízható és hatékony programok írását teszi lehetővé.

Ha már telepítve van a Rust a rustup segítségével, frissítheti a következő parancs használatával:
$ rustup update stable

A frissítés legfőbb újdonsága a Fn, FnOnce, FnMut zárványok traitjeinek implementálása a Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut> számára. Lehetővé vált a zárványok unsafe függvényekre való átkonvertálása, a dbg!() makró mostantól érvek nélkül is meghívható, és stabilizálták a szabványos könyvtárat.

Részletek:

  • Az új verzióban megvalósították a Fn, FnOnce, FnMut trait-eket a Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut> számára.
    Most már ez a kód működni fog:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Emellett a zárványokat közvetlenül a Box<dyn FnOnce>-ból is lehet hívni:
    fn foo(x: Box<dyn FnOnce()>) {
    x()
    }

  • Most már a zárványokat is lehet unsafe fn mutáló mutálásra átkonvertálni.
    Jelenleg ez a kód érvényes:
    /// 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!();
    });
    }
    }

  • Hozzáadták a dbg!() makró érvek nélküli hívásának lehetőségét.
    Ha bármilyen kifejezést továbbít a makrónak, az a kifejezés eredményét fogja kiírni. Példa:
    fn main() {
    let mut x = 0;

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

    dbg!(x);
    }

    Ha ezt a kódot futtatja, a következőt fogja látni:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0

    Most már így is írhat:
    fn main() {
    let condition = true;

    ha condition {
    dbg!();
    }
    }

    Ha ezt a kódot végrehajtja, a következőt fogja látni:
    [src/main.rs:5]

  • Stabilizálták a szabványos könyvtár bizonyos részeit.
    • Új módszerek f32 és f64-hez:
      • f32::copysign
      • f64::copysign

      Ezek a függvények átmásolják egy másik szám jelét. Példa:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Új módszerek kerültek hozzáadásra a Range típusokhoz.
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      Ezekkel a módszerekkel könnyen ellenőrizheti, hogy egy adott érték megtalálható-e a sorozatban:
      fn main() {
      ha (0..=10).contains(&5) {
      println!("Öt benne van a nullától tízig.");
      }
      }

    • A stabilizált API-k teljes listáját itt találja. itt
  • Ebben a frissítésben a Clippy (ez egy program, amely ellenőrzi a kódját a hibák miatt) új ellenőrzést kapott a drop_bounds-ra. Ez az ellenőrzés aktiválódik, amikor korlátozást állít be: T: Drop — általános funkciók esetén:
    fn foo<T: Drop>(x: T) {}

    A T: Drop korlátozás általában hibát jelent, mivel az azonnal kizár bizonyos típusokat, például az u8-at. (Erről bővebben olvashat.) itt)

  • Sok minden javult és lett kijavítva a Cargo (a nyelv csomagkezelője) esetében. a változások teljes listája

Forrás: linux.org.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster