Rust 1.35

Rusts utvecklingsteam Àr glada att presentera den nya versionen av sitt sprÄk: 1.35. Rust Àr ett programmeringssprÄk som möjliggör att skriva pÄlitliga och effektiva program.

Om du redan har installerat Rust via rustup kan du uppdatera med kommandot:
$ rustup update stable

Huvudpunkten i uppdateringen Àr implementeringen av traitarna Fn, FnOnce, FnMut för Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, respektive. Dessutom har möjligheten att konvertera closures till pekare pÄ osÀkra funktioner lagts till och makrot dbg!() kan nu anropas utan argument. Stabilisering av standardbiblioteket har genomförts.

Detaljer:

  • I den nya versionen har implementationer av traitarna Fn, FnOnce, FnMut lagts till för Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, respektive.
    Nu kommer följande kod att fungera:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
    vec![1, 2, 3, 4].into_iter().map(x).collect()
    }

    Dessutom kan closures nu kallas direkt frÄn Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
    x()
    }

  • Nu kan closures konverteras till pekare pĂ„ unsafe fn.
    Nu Àr följande kod giltig:
    /// 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!();
    });
    }
    }

  • Möjligheten att anropa makrot dbg!() utan argument har lagts till.
    Om nÄgot uttryck ges till detta makro kommer det att skriva ut resultatet. Exempel:
    fn main() {
    let mut x = 0;

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

    dbg!(x);
    }

    NÀr sÄdan kod körs ser du:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0

    Nu kan du skriva sÄ hÀr:
    fn main() {
    let condition = true;

    if condition {
    dbg!();
    }
    }

    NÀr sÄdana kod körs ser du:
    [src/main.rs:5]

  • Vissa delar av standardbiblioteket har stabiliserats.
    • Nya metoder för f32 och f64:
      • f32::copysign
      • f64::copysign

      Funktionerna kopierar i sjÀlva verket tecknet frÄn ett annat tal. Exempel:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }

    • Nya metoder för Range-typer har lagts till.
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains

      Med dessa metoder kan man enkelt kontrollera om ett viss vÀrde finns i en sekvens:
      fn main() {
      if (0..=10).contains(&5) {
      println!("Five is included in zero to ten.");
      }
      }

    • Den fullstĂ€ndiga listan över stabiliserade API:er kan du hitta ). Ett typiskt exempel pĂ„ anvĂ€ndning:
  • I denna uppdatering har Clippy (ett program som kontrollerar din kod för mĂ„nga fel) fĂ„tt en ny kontroll för drop_bounds. Denna kontroll aktiveras nĂ€r du sĂ€tter en begrĂ€nsning: T: Drop — för generiska funktioner:
    fn foo<T: Drop>(x: T) {}

    Att ha begrÀnsningen T: Drop Àr oftast ett misstag, eftersom det omedelbart utesluter vissa typer, som exempelvis u8. (Mer om detta kan lÀsas.) ). Ett typiskt exempel pÄ anvÀndning:)

  • MĂ„nga förbĂ€ttringar och korrigeringar har gjorts i Cargo (pakethanteraren för sprĂ„ket). fullstĂ€ndig Ă€ndringslista

KĂ€lla: linux.org.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster