Rust 1.35

Rust izstrādes komanda ir lepna piedāvāt jauno versiju savā valodā: 1.35. Rust ir programēšanas valoda, kas ļauj rakstīt uzticamas un efektīvas programmas.

Ja jums jau ir uzstādīts Rust caur rustup, tad varat atjaunināt ar komandu:
$ rustup update stable

Galvenais atjauninājumā ir īstenojums traits slēgumiem Fn, FnOnce, FnMut attiecīgi Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>. Tika pievienota iespēja pārvērst slēgumus par rādītājiem uz nedrošām funkcijām, makro dbg!() tagad var izsaukt bez argumentiem, ir stabilizēta standarta bibliotēka.

Pārejam pie detaļām:

  • Jaunajā versijā tika pievienoti traits īstenojumi Fn, FnOnce, FnMut attiecīgi Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>.
    Tagad tāds kods darbosies:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Arī var izsaukt slēgumu tieši no Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
    x()
    }

  • Tagad slēgumus var pārvērst uz rādītājiem uz unsafe fn.
    Tagad tāds kods ir derīgs:
    /// 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!();
    });
    }
    }

  • Tika pievienota iespēja izsaukt makro dbg!() bez argumentiem.
    Ja šim makro nododat kādu izteiksmi, tad makro izvadi tās rezultātu. Piemērs:
    fn main() {
    let mut x = 0;

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

    dbg!(x);
    }

    Kad šādu kodu palaidīsiet, jūs redzēsiet:
    [src\/main.rs:4] x == 1 = false
    [src\/main.rs:8] x = 0

    Tagad jūs varat rakstīt šādi:
    fn main() {
    let condition = true;

    ja condition {
    dbg!();
    }
    }

    Izpildot šādu kodu, jūs redzēsiet:
    [src\/main.rs:5]

  • Tika stabilizētas dažas standarta bibliotēkas daļas.
    • Jauni metodes f32 un f64:
      • f32::copysign
      • f64::copysign

      Faktiski funkcijas kopēzīmi no cita skaitļa. Piemērs:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Jaunas metodes Range tipiem
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      Ar šīm metodēm var viegli pārbaudīt, vai noteikta vērtība ir secībā:
      fn main() {
      ja (0..=10).contains(&5) {
      println!("Pieci ir iekļauts no nulles līdz desmit.");
      }
      }

    • Pilnu stabilizēto API sarakstu var atrast šeit
  • Šajā atjaunināšanā, Clippy (tas ir rīks, kas pārbauda jūsu kodu uz vairākām kļūdām) pievienoja jaunu pārbaudi drop_bounds. Šī pārbaude tiek aktivizēta, kad jūs uzstādāt ierobežojumu: T: Drop - generiskajām funkcijām:
    fn foo<T: Drop>(x: T) {}

    Ievietot ierobežojumu T: Drop visbiežāk ir kļūda, jo tas uzreiz izslēdz dažus tipus, piemēram, u8. (Vairāk par to var lasīt) šeit)

  • Ļoti daudz uzlabojumu un labojumu veikts Cargo (valodas pakotņu pārvaldnieks), pilns izmaiņu saraksts

Avots: linux.org.ru

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster