Rust 1.35

Ekipa razvijalcev Rust z veseljem predstavlja novo različico svojega jezika: 1.35. Rust je programski jezik, ki omogoča pisanje zanesljivih in učinkovitih programov.

Če imate Rust že nameščen preko rustup, ga lahko posodobite z ukazom:
$ rustup update stable

Ključna novost v posodobitvi je implementacija traitov zapiranja Fn, FnOnce, FnMut za Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, v skladu s tem. Dodana je bila možnost pretvarjanja zapiral v pokazatelje na nevarne funkcije, zahteva makroja dbg!() pa je sedaj mogoča brez argumentov, stabilizacija standardne knjižnice je bila dokončana.

Podrobnosti:

  • V novi različici so dodali implementacije traitov Fn, FnOnce, FnMut za Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>.
    Sedaj bo takšna koda delovala:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Prav tako lahko pokličete zapiranje neposredno iz Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
    x()
    }

  • Sedaj je možno pretvarjati zapiranja v pokazatelje na unsafe fn.
    Takšna koda je trenutno veljavna:
    /// 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!();
    });
    }
    }

  • Dodana je bila možnost klica makroja dbg!() brez argumentov.
    Če makrou posredujete kakšno izrazo, bo makro izpisal njegov rezultat. Primer:
    fn main() {
    let mut x = 0;

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

    dbg!(x);
    }

    Ko zaženete takšno kodo, boste videli:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0

    Zdaj lahko napišete tako:
    fn main() {
    let condition = true;

    if condition {
    dbg!();
    }
    }

    Ko izvedete to kodo, boste videli:
    [src/main.rs:5]

  • Nekatere dele standardne knjižnice so stabilizirali.
    • Nove metode za f32 in f64:
      • f32::copysign
      • f64::copysign

      Te funkcije kopirajo znak iz druge številke. Primer:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Dodane so nove metode za Range tipe.
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      S temi metodami lahko enostavno preverite, ali je določena vrednost v zaporedju:
      fn main() {
      if (0..=10).contains(&5) {
      println!("Pet je vključena od nič do deset.");
      }
      }

    • Popoln seznam stabiliziranih API-jev lahko najdete: tukaj
  • V tej posodobitvi so v Clippy (to je program, ki preverja vaš kodo na številne napake) dodali novo preverjanje za drop_bounds. To preverjanje se sproži, ko postavite omejitev: T: Drop — za generične funkcije:
    fn foo<T: Drop>(x: T) {}

    Imeti omejitev T: Drop je pogosto napaka, saj takoj izključi nekatere tipe, kot je na primer u8. (Več o tem lahko preberete) tukaj)

  • Zelo veliko je bilo izboljšanega in popravljenega v Cargo (paketni upraviteljski jezik), celoten seznam sprememb

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster