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 = 0Nu 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:
- Nya metoder för f32 och f64:
- 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
