Wydanie języka programowania Rust 1.47

opublikowany wydanie 1.47 języka programowania systemu Rdza, założona przez projekt 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 Śmieciarz и Czas (czas działania sprowadza się 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. Trwają prace nad menedżerem pakietów, który umożliwi dystrybucję bibliotek, zapewnienie montażu i zarządzanie zależnościami w ramach projektu. Ładunek. Repozytorium jest obsługiwane w celu hostowania bibliotek skrzynie.io.

Głównym innowacje:

  • Zaimplementowano obsługę typów tablice dowolny rozmiar. 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 stałych generycznych („const Generics”) możliwe stało się zdefiniowanie funkcji generycznych dla dowolnej wielkości tablicy, jednak nie są one jeszcze uwzględnione w stabilnych cechach języka, chociaż są zaimplementowane w kompilatorze i są Teraz zaangażowany w bibliotece standardowej dla cech tablicowych 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 kroki, które pozwalają od razu uchwycić esencję:

    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 budowania przy użyciu LLVM 11 (Rdza używa LLVM jako backend dla generowanie kodu). Jednocześnie możliwość budowania ze starszymi LLVM do wersji 8 zostaje zachowana, ale domyślnie (w projekt rust-lang/llvm) używa teraz LLVM 11. Oczekuje się, że LLVM 11 zostanie wydany w nadchodzących dniach.
  • 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 porcja API została przeniesiona do kategorii stabilnej, w tym stabilizowanej
    Identyfikator::new_raw,
    Zakres::jest_pusty,
    ZakresInclusive::is_empty,
    Wynik::as_deref,
    Wynik::as_deref_mut,
    Vec::wyciek,
    wskaźnik::offset_od,
    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.
  • Dla FreeBSD zaangażowany zestaw narzędzi z FreeBSD 11.4 (FreeBSD 10 nie obsługuje LLVM 11).

Źródło: opennet.ru

Dodaj komentarz