Rust izstrādes komanda ir lepna piedāvāt jauno versiju savā valodā: 1.35. Rust ir programēšanas valoda, kas ļauj rakstīt uzticamas un efektīvas programmas.
Ja jums jau ir uzstādīts Rust caur rustup, tad varat atjaunināt ar komandu:
$ rustup update stable
Galvenais atjauninājumā ir īstenojums traits slēgumiem Fn, FnOnce, FnMut attiecīgi Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>. Tika pievienota iespēja pārvērst slēgumus par rādītājiem uz nedrošām funkcijām, makro dbg!() tagad var izsaukt bez argumentiem, ir stabilizēta standarta bibliotēka.
Pārejam pie detaļām:
- Jaunajā versijā tika pievienoti traits īstenojumi Fn, FnOnce, FnMut attiecīgi Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>.
Tagad tāds kods darbosies:
fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Arī var izsaukt slēgumu tieši no Box<dyn FnOnce>:
fn foo(x: Box<dyn FnOnce()>) {
x()
} - Tagad slēgumus var pārvērst uz rādītājiem uz unsafe fn.
Tagad tāds kods ir derīgs:
/// 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!();
});
}
} - Tika pievienota iespēja izsaukt makro dbg!() bez argumentiem.
Ja šim makro nododat kādu izteiksmi, tad makro izvadi tās rezultātu. Piemērs:
fn main() {
let mut x = 0;ja dbg!(x == 1) {
x += 1;
}dbg!(x);
}Kad šādu kodu palaidīsiet, jūs redzēsiet:
[src\/main.rs:4] x == 1 = false
[src\/main.rs:8] x = 0Tagad jūs varat rakstīt šādi:
fn main() {
let condition = true;ja condition {
dbg!();
}
}Izpildot šādu kodu, jūs redzēsiet:
[src\/main.rs:5] - Tika stabilizētas dažas standarta bibliotēkas daļas.
- Jauni metodes f32 un f64:
- f32::copysign
- f64::copysign
Faktiski funkcijas kopēzīmi no cita skaitļa. Piemērs:
fn main() {
assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Jaunas metodes Range tipiem
- Range::contains
- RangeFrom::contains
- RangeTo::contains
- RangeInclusive::contains
- RangeToInclusive::contains
Ar šīm metodēm var viegli pārbaudīt, vai noteikta vērtība ir secībā:
fn main() {
ja (0..=10).contains(&5) {
println!("Pieci ir iekļauts no nulles līdz desmit.");
}
} - Pilnu stabilizēto API sarakstu var atrast šeit
- Jauni metodes f32 un f64:
- Šajā atjaunināšanā, Clippy (tas ir rīks, kas pārbauda jūsu kodu uz vairākām kļūdām) pievienoja jaunu pārbaudi drop_bounds. Šī pārbaude tiek aktivizēta, kad jūs uzstādāt ierobežojumu: T: Drop - generiskajām funkcijām:
fn foo<T: Drop>(x: T) {}Ievietot ierobežojumu T: Drop visbiežāk ir kļūda, jo tas uzreiz izslēdz dažus tipus, piemēram, u8. (Vairāk par to var lasīt) šeit)
- Ļoti daudz uzlabojumu un labojumu veikts Cargo (valodas pakotņu pārvaldnieks), pilns izmaiņu saraksts
Avots: linux.org.ru
