Ekipa razvijalcev Rust z veseljem predstavlja novo različico svojega jezika: 1.35. Rust je programski jezik, ki omogoča pisanje zanesljivih in učinkovitih programov.
Če imate Rust že nameščen preko rustup, ga lahko posodobite z ukazom:
$ rustup update stable
Ključna novost v posodobitvi je implementacija traitov zapiranja Fn, FnOnce, FnMut za Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, v skladu s tem. Dodana je bila možnost pretvarjanja zapiral v pokazatelje na nevarne funkcije, zahteva makroja dbg!() pa je sedaj mogoča brez argumentov, stabilizacija standardne knjižnice je bila dokončana.
Podrobnosti:
- V novi različici so dodali implementacije traitov Fn, FnOnce, FnMut za Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>.
Sedaj bo takšna koda delovala:
fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Prav tako lahko pokličete zapiranje neposredno iz Box<dyn FnOnce>:
fn foo(x: Box<dyn FnOnce()>) {
x()
} - Sedaj je možno pretvarjati zapiranja v pokazatelje na unsafe fn.
Takšna koda je trenutno veljavna:
/// 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!();
});
}
} - Dodana je bila možnost klica makroja dbg!() brez argumentov.
Če makrou posredujete kakšno izrazo, bo makro izpisal njegov rezultat. Primer:
fn main() {
let mut x = 0;if dbg!(x == 1) {
x += 1;
}dbg!(x);
}Ko zaženete takšno kodo, boste videli:
[src/main.rs:4] x == 1 = false
[src/main.rs:8] x = 0Zdaj lahko napišete tako:
fn main() {
let condition = true;if condition {
dbg!();
}
}Ko izvedete to kodo, boste videli:
[src/main.rs:5] - Nekatere dele standardne knjižnice so stabilizirali.
- Nove metode za f32 in f64:
- f32::copysign
- f64::copysign
Te funkcije kopirajo znak iz druge številke. Primer:
fn main() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Dodane so nove metode za Range tipe.
- Range::contains
- RangeFrom::contains
- RangeTo::contains
- RangeInclusive::contains
- RangeToInclusive::contains
S temi metodami lahko enostavno preverite, ali je določena vrednost v zaporedju:
fn main() {
if (0..=10).contains(&5) {
println!("Pet je vključena od nič do deset.");
}
} - Popoln seznam stabiliziranih API-jev lahko najdete: tukaj
- Nove metode za f32 in f64:
- V tej posodobitvi so v Clippy (to je program, ki preverja vaš kodo na številne napake) dodali novo preverjanje za drop_bounds. To preverjanje se sproži, ko postavite omejitev: T: Drop — za generične funkcije:
fn foo<T: Drop>(x: T) {}Imeti omejitev T: Drop je pogosto napaka, saj takoj izključi nekatere tipe, kot je na primer u8. (Več o tem lahko preberete) tukaj)
- Zelo veliko je bilo izboljšanega in popravljenega v Cargo (paketni upraviteljski jezik), celoten seznam sprememb
Izvor: linux.org.ru
