Wydanie języka programowania Rust 1.55

Opublikowano wydanie systemowego języka programowania Rust 1.55, założonego przez projekt Mozilla, ale obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpieczeństwie pamięci, zapewnia automatyczne zarządzanie pamięcią i zapewnia środki do osiągnięcia dużej równoległości zadań bez użycia modułu zbierającego elementy bezużyteczne lub środowiska wykonawczego (czas działania jest zredukowany do podstawowej inicjalizacji i konserwacji biblioteki standardowej).

Automatyczne zarządzanie pamięcią Rusta eliminuje błędy podczas manipulowania wskaźnikami i chroni przed problemami wynikającymi z manipulacji pamięcią na niskim poziomie, takimi jak dostęp do obszaru pamięci po jego zwolnieniu, wyłuskiwanie wskaźników zerowych, przepełnienie bufora itp. Aby rozpowszechniać biblioteki, zapewniać montaż i zarządzać zależnościami, w ramach projektu opracowywany jest menedżer pakietów Cargo. Repozytorium crates.io jest obsługiwane w przypadku bibliotek hostujących.

Główne innowacje:

  • Menedżer pakietów Cargo ma możliwość łączenia zduplikowanych błędów i ostrzeżeń, które pojawiają się podczas kompilacji. Podczas wykonywania poleceń takich jak „cargo test” i „cargo check --all-targets”, które skutkują wieloma kompilacjami pakietu o różnych parametrach, zamiast wyświetlać użytkownikowi wyświetlane jest teraz podsumowanie wystąpienia powtarzającego się problemu wiele identycznych ostrzeżeń podczas wielokrotnego budowania tego samego.file. $ cargo +1.55.0 check —all-targets Sprawdzanie foo v0.1.0 ostrzeżenie: funkcja nigdy nie jest używana: 'foo' —> src/lib.rs:9:4 | 9 | fn foo() {} | ^^^ | = uwaga: „#[warn(dead_code)]” domyślnie włączone ostrzeżenie: „foo” (lib) wygenerowało 1 ostrzeżenie ostrzeżenie: „foo” (lib test) wygenerowało 1 ostrzeżenie (1 duplikat) Zakończono programowanie [niezoptymalizowany + debuginfo] cel (s) w 0.84 s
  • Kod analizy zmiennoprzecinkowej w bibliotece standardowej został przeniesiony w celu wykorzystania szybszego i dokładniejszego algorytmu Eisela-Lemire'a, co rozwiązało niektóre wcześniej zaobserwowane problemy z zaokrąglaniem i analizowaniem liczb o bardzo dużej liczbie cyfr.
  • Ustabilizowano możliwość podawania w szablonach zakresów niezamkniętych („X..” jest interpretowane jako zakres rozpoczynający się od wartości X i kończący się na maksymalnej wartości typu integer): dopasuj x as u32 { 0 => println! („zero!”), 1.. => println!("liczba dodatnia!"), }
  • Rozszerzone warianty błędów objęte std::io::ErrorKind (klasyfikuje błędy w kategorie takie jak NotFound i byłobyBlock). Wcześniej błędy, które nie pasowały do ​​istniejących kategorii, trafiały do ​​kategorii ErrorKind::Other, która była również używana w przypadku błędów w kodzie stron trzecich. Istnieje teraz osobna kategoria wewnętrzna ErrorKind::Uncategorized dla błędów, które nie pasują do istniejących kategorii, a kategoria ErrorKind::Other jest ograniczona do błędów, które nie występują w bibliotece standardowej (standardowe funkcje biblioteczne, które zwracają io::Error nie korzystaj już z kategorii ErrorKind:: Inne).
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • Związany::klonowany
    • Odpływ::as_str
    • IntoInnerError::into_error
    • IntoInnerError::into_parts
    • MożeUninit::assume_init_mut
    • MożeUninit::assume_init_ref
    • MożeUninit::pisz
    • tablica::mapa
    • ops::ControlFlow
    • x86::_bittest
    • x86::_bittestiuzupełnienie
    • x86::_bittestandreset
    • x86::_bittestandset
    • x86_64::_bittest64
    • x86_64::_bittestandcomplement64
    • x86_64::_bittestandreset64
    • x86_64::_bittestandset64
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, wykorzystywany jest w metodzie str::from_utf8_unchecked.
  • Dla platformy powerpc64le-unknown-freebsd zaimplementowano trzeci poziom wsparcia. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.

Źródło: opennet.ru

Dodaj komentarz