Das Rust-Entwicklungsteam freut sich, die neue Version seiner Programmiersprache vorzustellen: 1.35. Rust ist eine Programmiersprache, die es ermöglicht, zuverlässige und effiziente Programme zu schreiben.
Wenn Sie Rust bereits über rustup installiert haben, können Sie mit dem folgenden Befehl aktualisieren:
$ rustup update stable
Das Wichtigste an diesem Update ist die Implementierung der Traits Fn, FnOnce, FnMut für Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, entsprechend. Zudem wurde die Möglichkeit hinzugefügt, Closures auf Zeiger zu unsicheren Funktionen zu casten, und der Aufruf des Macros dbg!() ist jetzt ohne Argumente möglich, während die Standardbibliothek stabilisiert wurde.
Im Detail:
- In der neuen Version wurden die Implementierungen der Traits Fn, FnOnce, FnMut für Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut> hinzugefügt.
Jetzt funktioniert folgender Code:
fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Außerdem kann ein Closure direkt aus Box<dyn FnOnce> aufgerufen werden:
fn foo(x: Box<dyn FnOnce()>) {
x()
} - Jetzt können Closures auf Zeiger zu unsafe fn gecastet werden.
Der folgende Code ist jetzt gültig:
/// 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!();
});
}
} - Die Möglichkeit, das Macro dbg!() ohne Argumente aufzurufen, wurde hinzugefügt.
Wenn Sie diesem Makro einen Ausdruck übergeben, gibt das Makro dessen Ergebnis aus. Beispiel:
fn main() {
let mut x = 0;if dbg!(x == 1) {
x += 1;
}dbg!(x);
}Wenn Sie diesen Code ausführen, sehen Sie:
[src/main.rs:4] x == 1 = false
[src/main.rs:8] x = 0Jetzt können Sie es so schreiben:
fn main() {
let condition = true;if condition {
dbg!();
}
}Wenn Sie diesen Code ausführen, sehen Sie:
[src/main.rs:5] - Einige Teile der Standardbibliothek wurden stabilisiert.
- Neue Methoden für f32 und f64:
- f32::copysign
- f64::copysign
Diese Funktionen kopieren das Vorzeichen einer anderen Zahl. Beispiel:
fn main() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Neue Methoden für Range-Typen hinzugefügt:
- Range::contains
- RangeFrom::contains
- RangeTo::contains
- RangeInclusive::contains
- RangeToInclusive::contains
Mit diesen Methoden können Sie leicht überprüfen, ob ein bestimmter Wert in einer Sequenz vorhanden ist:
fn main() {
if (0..=10).contains(&5) {
println!("Fünf ist im Bereich von null bis zehn enthalten.");
}
} - Die vollständige Liste der stabilisierten APIs finden Sie hier
- Neue Methoden für f32 und f64:
- In diesem Update wurde in Clippy (ein Programm, das Ihren Code auf viele Fehler prüft) eine neue Überprüfung für drop_bounds hinzugefügt. Diese Überprüfung tritt in Kraft, wenn Sie eine Einschränkung setzen: T: Drop – für generische Funktionen:
fn foo(x: T) {}Eine T: Drop-Beschränkung ist häufig ein Fehler, da dadurch sofort bestimmte Typen wie z.B. u8 ausgeschlossen werden. (Mehr dazu kann man lesen) hier)
- Es wurden viele Verbesserungen und Korrekturen in Cargo (dem Paketmanager der Sprache) vorgenommen. vollständige Liste der Änderungen
Quelle: linux.org.ru
