Tým vývojářů Rust s potěšením představuje novou verzi svého jazyka: 1.35. Rust je programovací jazyk, který umožňuje psát spolehlivé a efektivní programy.
Pokud máte Rust již nainstalován přes rustup, můžete aktualizovat příkazem:
$ rustup update stable
Hlavní novinkou této aktualizace je implementace traitů uzávěrů Fn, FnOnce, FnMut pro Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, a to včetně možnosti konvertovat uzávěry na ukazatele na nebezpečné funkce. Zavolání makra dbg!() je nyní možné bez argumentů a byla stabilizována standardní knihovna.
Podrobnosti:
- V nové verzi byly přidány implementace traitů Fn, FnOnce, FnMut pro Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>.
Nyní takový kód bude fungovat:
fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Dále můžete volat uzávěr přímo z Box<dyn FnOnce>:
fn foo(x: Box<dyn FnOnce()>) {
x()
} - Nyní je možné převádět uzávěry na ukazatele na unsafe fn.
Nyní je takový kód platný:
/// 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!();
});
}
} - Byla přidána možnost volání makra dbg!() bez argumentů.
Pokud tomuto makru předáte nějaký výraz, makro vypíše jeho výsledek. Příklad:
fn main() {
let mut x = 0;if dbg!(x == 1) {
x += 1;
}dbg!(x);
}Při spuštění takového kódu uvidíte:
[src/main.rs:4] x == 1 = false
[src/main.rs:8] x = 0Nyní můžete napsat toto:
fn main() {
let condition = true;if condition {
dbg!();
}
}Při vykonání takového kódu uvidíte:
[src/main.rs:5] - Byly stabilizovány některé části standardní knihovny.
- Nové metody pro f32 a f64:
- f32::copysign
- f64::copysign
Funkce kopírují znak z jiného čísla. Příklad:
fn main() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Byly přidány nové metody pro Range typy.
- Range::contains
- RangeFrom::contains
- RangeTo::contains
- RangeInclusive::contains
- RangeToInclusive::contains
S těmito metodami můžete snadno zkontrolovat, zda daná hodnota je součástí sekvence:
fn main() {
if (0..=10).contains(&5) {
println!("Pět je zahrnuto v rozsahu od nuly do deseti.");
}
} - Úplný seznam stabilizovaných API můžete najít. tady
- Nové metody pro f32 a f64:
- V této aktualizaci byla v Clippy (program, který kontroluje váš kód na různé chyby) přidána nová kontrola pro drop_bounds. Tato kontrola se aktivuje, když nastavíte omezení: T: Drop — pro generické funkce:
fn foo<T: Drop>(x: T) {}Mít omezení T: Drop je často chybou, protože okamžitě vylučuje některé typy, jako například u8. (Více o tom si můžete přečíst.) tady)
- Bylo vylepšeno a opraveno mnoho věcí v Cargo (správce balíčků jazyka), úplný seznam změn
Zdroj: linux.org.ru
