Zespół programistów Rusta ma przyjemność ogłosić nową wersję swojego języka: 1.35. Rust to język programowania, który pozwala pisać niezawodne i wydajne programy.
Jeśli masz już zainstalowany Rust poprzez rustup, możesz dokonać aktualizacji za pomocą polecenia:
Aktualizacja $ rustup stabilna
Najważniejszą rzeczą w aktualizacji jest wdrożenie cech zamknięcia Fn, FnOnce, FnMut dla Boxa ,Skrzynka ,Skrzynka odpowiednio. Dodanie możliwości rzucania domknięć na wskaźniki do niebezpiecznych funkcji, wywoływanie makra dbg!() jest teraz możliwe bez argumentów, a standardowa biblioteka została ustabilizowana.
Przejdź do szczegółów:
- W nowej wersji dodaliśmy implementacje cech Fn, FnOnce, FnMut dla Boxa ,Skrzynka ,Skrzynka odpowiednio.
Teraz ten kod będzie działać:
fn foo(x: Pudełko u8>) -> Vek {
vec![1, 2, 3, 4].into_iter().map(x).collect()
}Możesz także wywołać zamknięcie bezpośrednio z Box :
fn foo(x: Pudełko ) {
X()
} - Zamknięcia można teraz rzutować na wskaźniki do niebezpiecznego fn.
Teraz ten kod jest ważny:
/// Niezmienniki bezpieczeństwa to te, które zostały przekazane przez wskaźnik `unsafe fn`.
niebezpieczne fn call_unsafe_fn_ptr(f: niebezpieczne fn()) {
F()
}fn główna() {
// BEZPIECZEŃSTWO: Nie ma niezmienników.
// Zamknięcie statycznie uniemożliwia wykonywanie niebezpiecznych czynności.
niebezpieczny {
call_unsafe_fn_ptr(|| {
dbg!();
});
}
} - Dodano możliwość wywołania makra dbg!() bez argumentów.
Jeśli przekażesz jakieś wyrażenie do tego makra, makro wydrukuje jego wynik. Przykład:
fn główna() {
niech mut x = 0;jeśli dbg!(x == 1) {
x += 1;
}dbg!(x);
}Po uruchomieniu tego kodu zobaczysz:
[src/main.rs:4] x == 1 = fałsz
[src/main.rs:8] x = 0Teraz możesz napisać tak:
fn główna() {
niech warunek = prawda;jeśli warunek {
dbg!();
}
}Po uruchomieniu tego kodu zobaczysz:
[src/main.rs:5]
- Niektóre części biblioteki standardowej zostały ustabilizowane
- Nowe metody dla f32 i f64:
- f32::kopiuj
- f64::kopiuj
Właściwie funkcje kopiują znak innej liczby. Przykład:
fn główna() {
Assert_eq!(3.5_f32.copysign(-0.42), -3.5);
} - Dodano nowe metody dla typów Range
- Zakres::zawiera
- ZakresOd::zawiera
- ZakresDo::zawiera
- ZakresInclusive::zawiera
- RangeToInclusive::zawiera
Za pomocą tych metod możesz łatwo sprawdzić, czy dana wartość znajduje się w sekwencji:
fn główna() {
jeśli (0..=10).zawiera(&5) {
println!("Pięć to liczba od zera do dziesięciu.");
}
} - Pełną listę ustabilizowanych interfejsów API można znaleźć tutaj
- Nowe metody dla f32 i f64:
- W tej aktualizacji Clippy (jest to program, który sprawdza kod pod kątem wielu błędów) dodał nowe sprawdzenie drop_bounds. To sprawdzenie działa, gdy ustawisz ograniczenie: T: Drop - dla funkcji uogólnionych:
fn foo (x:T){}Posiadanie ograniczenia T: Drop jest najczęściej błędem, ponieważ niektóre typy są natychmiast wykluczane, na przykład u8 (możesz przeczytać więcej na ten temat tutaj)
- Dużo ulepszeń i poprawek w Cargo (menedżer pakietów językowych), pełna lista zmian
Źródło: linux.org.ru
