Rust 1.35

Ekipi i zhvilluesve të Rust është i lumtur të prezantojë versionin e ri të gjuhës së tij: 1.35. Rust është një gjuhë programuese që lejon shk writtene të programeve të sigurta dhe efikase.

Nëse keni instaluar tashmë Rust përmes rustup, mund të përditësoni me komandën:
$ rustup update stable

E rëndësishme në këtë përditësim është zbatimi i trait-ëve të mbylljes Fn, FnOnce, FnMut për Box, Box, Box përkatësisht. Përfshirja e mundësisë për të konvertuar mbylljet në tregues për funksione të pasigurta, thirrja e makrosë dbg!() tani është e mundur pa argumente, ndërsa është stabilizuar biblioteka standarde.

Në detaje:

  • Në versionin e ri janë shtuar implementimet e trait-ëve Fn, FnOnce, FnMut për Box, Box, Box përkatësisht.
    Tani ky kod do të funksionojë:
    fn foo(x: Box u8>) -> Vec {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Po ashtu, mund të thirret mbyllja direkt nga Box:
    fn foo(x: Box) {
    x()
    }

  • Tani mbylljet mund të konvertohen në tregues për unsafe fn.
    Tani ky kod është valid:
    /// 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!();
    });
    }
    }

  • Shtuar mundësia për të thirrur makrosën dbg!() pa argumente.
    Nëse i jepni këtij makrosi ndonjë shprehje, atëherë makrosi do të shfaqë rezultatin e saj. Shembull:
    fn main() {
    let mut x = 0;

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

    dbg!(x);
    }

    Kur ekzekutoni këtë kod, do të shihni:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0

    Tani mund ta shkruani kështu:
    fn main() {
    let condition = true;

    if condition {
    dbg!();
    }
    }

    Kur ekzekutoni këtë kod, do të shihni:
    [src/main.rs:5]

  • Disa pjesë të bibliotekës standarde janë stabilizuar
    • Metoda të reja për f32 dhe f64:
      • f32::copysign
      • f64::copysign

      Funksionet kopjojnë shenjën nga një numër tjetër. Shembull:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Kanë qenë shtuar metoda të reja për tipat Range
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      Me këto metoda, është e lehtë të kontrolloni nëse një vlerë e caktuar ekziston në sekuencë:
      fn main() {
      if (0..=10).contains(&5) {
      println!("Pesë është e përfshirë nga zero në dhjetë.");
      }
      }

    • Lista e plotë e API-ve të stabilizuar mund të gjendet këtu
  • Në këtë përditësim, në Clippy (kjo është një program që kontrollon kodin tuaj për shumë gabime) u shtua një kontroll i ri për drop_bounds. Ky kontroll aktivizohet kur vendosni një kufizim: T: Drop — për funksionet e përgjithshme:
    fn foo(x: T) {}

    Të kesh kufizim T: Drop shpesh është një gabim, pasi disa lloje përjashtohen menjëherë, si për shembull, u8. (Më shumë për këtë mund të lexoni) këtu)

  • Shumë janë përmirësuar dhe rregulluar në Cargo (menaxheri i paketave të gjuhës) lista e plotë e ndryshimeve

Burimi: linux.org.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster