A Rust fejlesztőcsapata örömmel mutatja be a nyelv új verzióját: 1.35. A Rust egy programozási nyelv, amely megbízható és hatékony programok írását teszi lehetővé.
Ha már telepítve van a Rust a rustup segítségével, frissítheti a következő parancs használatával:
$ rustup update stable
A frissítés legfőbb újdonsága a Fn, FnOnce, FnMut zárványok traitjeinek implementálása a Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut> számára. Lehetővé vált a zárványok unsafe függvényekre való átkonvertálása, a dbg!() makró mostantól érvek nélkül is meghívható, és stabilizálták a szabványos könyvtárat.
Részletek:
- Az új verzióban megvalósították a Fn, FnOnce, FnMut trait-eket a Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut> számára.
Most már ez a kód működni fog:
fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Emellett a zárványokat közvetlenül a Box<dyn FnOnce>-ból is lehet hívni:
fn foo(x: Box<dyn FnOnce()>) {
x()
} - Most már a zárványokat is lehet unsafe fn mutáló mutálásra átkonvertálni.
Jelenleg ez a kód érvényes:
/// 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!();
});
}
} - Hozzáadták a dbg!() makró érvek nélküli hívásának lehetőségét.
Ha bármilyen kifejezést továbbít a makrónak, az a kifejezés eredményét fogja kiírni. Példa:
fn main() {
let mut x = 0;ha dbg!(x == 1) {
x += 1;
}dbg!(x);
}Ha ezt a kódot futtatja, a következőt fogja látni:
[src/main.rs:4] x == 1 = false
[src/main.rs:8] x = 0Most már így is írhat:
fn main() {
let condition = true;ha condition {
dbg!();
}
}Ha ezt a kódot végrehajtja, a következőt fogja látni:
[src/main.rs:5] - Stabilizálták a szabványos könyvtár bizonyos részeit.
- Új módszerek f32 és f64-hez:
- f32::copysign
- f64::copysign
Ezek a függvények átmásolják egy másik szám jelét. Példa:
fn main() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Új módszerek kerültek hozzáadásra a Range típusokhoz.
- Range::contains
- RangeFrom::contains
- RangeTo::contains
- RangeInclusive::contains
- RangeToInclusive::contains
Ezekkel a módszerekkel könnyen ellenőrizheti, hogy egy adott érték megtalálható-e a sorozatban:
fn main() {
ha (0..=10).contains(&5) {
println!("Öt benne van a nullától tízig.");
}
} - A stabilizált API-k teljes listáját itt találja. itt
- Új módszerek f32 és f64-hez:
- Ebben a frissítésben a Clippy (ez egy program, amely ellenőrzi a kódját a hibák miatt) új ellenőrzést kapott a drop_bounds-ra. Ez az ellenőrzés aktiválódik, amikor korlátozást állít be: T: Drop — általános funkciók esetén:
fn foo<T: Drop>(x: T) {}A T: Drop korlátozás általában hibát jelent, mivel az azonnal kizár bizonyos típusokat, például az u8-at. (Erről bővebben olvashat.) itt)
- Sok minden javult és lett kijavítva a Cargo (a nyelv csomagkezelője) esetében. a változások teljes listája
Forrás: linux.org.ru
