Wydano rdzę 1.79. Utworzono konsorcjum w celu opracowania wysoce niezawodnych systemów w Rust

Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.79, stworzonego w ramach projektu Mozilla, ale obecnie rozwijanego pod auspicjami niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpieczeństwie pamięci i zapewnia środki do osiągnięcia wysokiej równoległości zadań przy jednoczesnym uniknięciu korzystania z modułu wyrzucania elementów bezużytecznych i środowiska uruchomieniowego (czas działania jest ograniczony do podstawowej inicjalizacji i konserwacji standardowej biblioteki).

Metody obsługi pamięci Rust chronią programistę przed błędami podczas manipulowania wskaźnikami i chronią przed problemami wynikającymi z obsługi pamięci niskiego poziomu, takimi jak dostęp do obszaru pamięci po jego zwolnieniu, dereferencja pustych wskaźników, przepełnienie bufora itp. Aby dystrybuować biblioteki, dostarczać kompilacje i zarządzać zależnościami, projekt rozwija menedżera pakietów Cargo. Repozytorium crates.io jest obsługiwane w przypadku bibliotek hostingowych.

Bezpieczeństwo pamięci w Rust jest zapewnione w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektów, śledzenie czasu życia obiektów (zakresów) i ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.

Główne innowacje:

  • Dodano obsługę stałych wbudowanych, które można określić bezpośrednio w kodzie za pomocą bloków „const { ... }”, przetwarzanych w kontekście stałych i pozwalających obejść się bez osobnej definicji stałych. Kod określony w bloku „const { ... }” jest obliczany na etapie kompilacji i używany jako stała, bez wykonywania podczas działania programu. W przeciwieństwie do definiowania stałych poprzez wyrażenie „const ITEM: ... = …” w blokach „const { ... }” nie trzeba określać typu, ponieważ obsługują one automatyczne wnioskowanie o typie. Na przykład kod z oddzielną definicją stałej

    const PUSTY: Opcja >=Brak;
    niech foo = [PUSTE; 100];

    można zastąpić lokalnym użyciem:

    niech foo = [const { Brak }; 100];

  • Ustabilizowana składnia „T: Cecha”. » w celu określenia ograniczeń na pozycji typu asocjacyjnego, co pozwala na skrócenie definicji wyrażeń z ograniczeniami typu zagnieżdżonego, które wcześniej wymagały podania zagnieżdżonej cechy impl lub wielu warunków „where”.
  • Zapewnione jest automatyczne przedłużenie czasu życia wartości tymczasowych używanych w konstrukcjach „dopasuj” i „jeśli”.

    niech a = jeśli prawda {
    ..;
    &temp() // czas życia zostanie przedłużony
    } Else {
    ..;
    &temp() // czas życia zostanie przedłużony
    };

  • Ustabilizowano możliwość importowania funkcji głównej z innych modułów i pakietów skrzynek.
  • Budując bibliotekę standardową, kompilator wykorzystuje flagę „-Cforce-frame-pointers=yes”, która dodaje dane do rekonstrukcji stosu podczas profilowania programu.
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • {liczba całkowita}::unchecked_add
    • {liczba całkowita}::unchecked_mul
    • {liczba całkowita}::unchecked_sub
    • <[T]>::split_at_unchecked
    • <[T]>::split_at_mut_unchecked
    • <[u8]>::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • <*const T>::is_aligned
    • <*mut T>::is_aligned
    • NonNull::is_aligned
    • <*stała [T]>::len
    • <*mut [T]>::len
    • <*const [T]>::is_empty
    • <*mut [T]>::is_empty
    • NonNull::<[T]>::is_empty
    • CStr::count_bytes
    • io::Błąd::przygnębiony
    • liczba::NieZero
    • ścieżka::absolutna
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, jest używany w funkcjach:
    • Atomowy*::do_wewnętrznego
    • io::Kursor::nowy
    • io::Cursor::get_ref
    • io::Kursor::pozycja
    • io::puste
    • io::powtórz
    • io::umywalka
    • panika::Lokalizacja::rozmówca
    • panika::Lokalizacja::plik
    • panika::Lokalizacja::linia
    • panika::Lokalizacja::kolumna
  • Stabilizowany
    część możliwości, które można wykorzystać podczas kompilacji do pośredniej reprezentacji Webassembly (WASM).
  • Trzeci poziom wsparcia został wdrożony dla platform aarch64-apple-visionos, aarch64-apple-visionos-sim i riscv32ima-unknown-none-elf. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatycznych testów, publikowania oficjalnych kompilacji i sprawdzania, czy kod da się zbudować.
  • Zaimplementowano drugi poziom wsparcia dla platform docelowych aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm oraz x86_64-pc-windows-gnullvm. Drugi poziom wsparcia obejmuje gwarancję montażu.

Ponadto Fundacja Rust, która nadzoruje ekosystem językowy Rust, ogłosiła utworzenie Konsorcjum Rust Safety-Critical, którego celem jest wykorzystanie języka Rust w rozwiązaniach wymagających zwiększonej niezawodności (Safety-Critical Software), gdzie awaria może zagrozić życiu człowieka , zaszkodzić środowisku lub spowodować poważne uszkodzenie sprzętu. Do konsorcjum dołączyły ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle i Woven by Toyota. Wśród zadań, które konsorcjum rozwiąże, znajdzie się pisanie podręczników i rozwój bibliotek, lintersów i analizatorów statycznych, a także wykorzystanie formalnych metod weryfikacji niezawodności i rozwój podzbiorów językowych dla systemów o wysokiej niezawodności.

Wśród projektów związanych z systemami o wysokiej niezawodności można wymienić Verus - zestaw narzędzi do sprawdzania poprawności kodu napisanego w języku Rust. Weryfikację przeprowadza się poprzez zdefiniowanie specyfikacji opisującej akceptowalne zachowanie kodu. Podczas wykonywania kodu wykonywalnego Verus sprawdza zgodność ze specyfikacją, aby zapewnić prawidłowe działanie.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster