Wydanie języka programowania Rust 1.47

Ukazało się wydanie 1.47 języka programowania systemu Rust, stworzonego w ramach projektu Mozilla. 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:

  • Zaimplementowano obsługę cech dla tablic o dowolnym rozmiarze. Wcześniej, ze względu na brak możliwości zdefiniowania funkcji ogólnych dla wszystkich wartości całkowitych, biblioteka standardowa zapewniała wbudowaną obsługę cech tylko dla tablic o rozmiarze do 32 elementów (cechy dla każdego rozmiaru były definiowane statycznie). Dzięki stworzeniu funkcjonalności const Generics możliwe stało się zdefiniowanie funkcji generycznych dla dowolnego rozmiaru tablicy, jednak nie są one jeszcze uwzględnione w stabilnych cechach języka, chociaż są zaimplementowane w kompilatorze i są obecnie używane w standardowej bibliotece dla typów tablic o dowolnym rozmiarze.
    Na przykład poniższa konstrukcja w Rust 1.47 wydrukuje zawartość tablicy, chociaż wcześniej spowodowałoby to błąd:

fn główna() {
niech xs = [0; 34];
println!("{:?}", xs);
}

  • Zapewnione wyjście krótszych śladów (backtrace), wyjście w sytuacjach awaryjnych. Elementy, które w większości sytuacji nie są interesujące, ale zaśmiecają wyniki i odwracają uwagę od głównych przyczyn problemu, są wykluczane ze śladu. Aby zwrócić pełny ślad, możesz użyć zmiennej środowiskowej „RUST_BACKTRACE=full”. Na przykład dla kodu

fn główna() {
panika!();
}

Wcześniej ślad był wyprowadzany w 23 etapach, ale teraz zostanie zredukowany do 3 etapów, co umożliwi natychmiastowe uchwycenie esencji:

wątek „main” wpadł w panikę z powodu „wyraźnej paniki”, src/main.rs:2:5
ślad stosu:
0: std::panicking::begin_panic
w /rustc/d…d75a/library/std/src/panicking.rs:497
1: plac zabaw::główny
w ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
w /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Kompilator rustc został zaktualizowany do kompilacji przy użyciu LLVM 11 (Rust używa LLVM jako backendu do generowania kodu). Jednocześnie zachowana została możliwość budowania przy użyciu starego LLVM, aż do wersji 8, ale domyślnie (w rust-lang/llvm-project) używana jest teraz LLVM 11. Wydanie LLVM 11 spodziewane jest w nadchodzącym dni.
  • Na platformie Windows kompilator rustc zapewnia obsługę włączania kontroli integralności przepływu sterowania (Control Flow Guard), aktywowanych za pomocą flagi „-C control-flow-guard”. Na innych platformach ta flaga jest na razie ignorowana.
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym stabilizowane Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32::TAU i f64::TAU.
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, wykorzystywany jest w metodach:
    • nowy dla wszystkich liczb całkowitych innych niż zero;
    • sprawdzane_add, sprawdzane_sub, sprawdzane_mul, sprawdzane_neg, sprawdzane_shl, sprawdzane_shr, nasycające_add, nasycające_sub i nasycające_mul dla wszystkich liczb całkowitych;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punstanding, is_ascii_graphic, is_ascii_whitespace i is_ascii_control dla typów char i u8.
  • W przypadku FreeBSD używany jest zestaw narzędzi z FreeBSD 11.4 (FreeBSD 10 nie obsługuje LLVM 11).

Zaczerpnięte z opennet.ru

Źródło: linux.org.ru

Dodaj komentarz