Wydanie Rust 1.79. Utworzono konsorcjum do rozwoju niezawodnych systemów na bazie Rust

Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.79, opracowanego pierwotnie przez projekt Mozilla, a obecnie rozwijanego pod patronatem niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpiecznym zarządzaniu pamięcią i zapewnia narzędzia do osiągania wysokiego poziomu równoległości w wykonywaniu zadań, jednocześnie unikając użycia garbage collectora i runtime (runtime ogranicza się do podstawowej inicjalizacji i towarzyszenia standardowej bibliotece).

Metody zarządzania pamięcią w Rust eliminują błędy związane z manipulowaniem wskaźnikami oraz chronią przed problemami wynikającymi z niskopoziomowej obsługi pamięci, takimi jak dostęp do pamięci po jej zwolnieniu, dereferencjonowanie wskaźników zerowych, wychodzenie poza granice bufora itp. Dla rozprowadzania bibliotek, zapewnienia budowy i zarządzania zależnościami, rozwijany jest menedżer pakietów Cargo. Dla publikacji bibliotek wspierany jest repozytorium crates.io.

Bezpieczne zarządzanie pamięcią w Rust jest zapewnione podczas kompilacji poprzez kontrolę referencji, śledzenie własności obiektów, uwzględnianie czasu życia obiektów (zakresu widoczności) oraz ocenę prawidłowości dostępu do pamięci w czasie wykonywania kodu. Rust oferuje również narzędzia do ochrony przed przepełnieniami liczbowymi, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej obsługuje błędy w standardowej bibliotece, stosuje koncepcję niemutowalności (immutable) referencji i zmiennych domyślnie oraz oferuje silne statyczne typowanie w celu minimalizacji błędów logicznych.

Główne nowości:

  • Dodano wsparcie dla inline-konstant, które można określać bezpośrednio w kodzie za pomocą bloków „const { … }”, przetwarzanych w kontekście stałych, co pozwala uniknąć oddzielnego definiowania stałych. Kod zawarty w bloku „const { … }” jest obliczany na etapie kompilacji i jest używany jako stała, bez wykonywania go w trakcie działania programu. W przeciwieństwie do definiowania stałych przez wyrażenie „const ITEM: … = …”, w blokach „const { … }” nie trzeba określać typu, ponieważ wspierają one automatyczne wnioskowanie typów. Na przykład, kod z oddzielnym definiowaniem stałej

    const EMPTY: Option<Vec> = None;
    let foo = [EMPTY; 100];

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

    let foo = [const { None }; 100];

  • Stabilizowano składnię „T: Trait” do określania ograniczeń w pozycji asocjacyjnego typu, co pozwala skrócić definicje wyrażeń z zagnieżdżonymi ograniczeniami typu, które wcześniej wymagały wskazania zagnieżdżonego impl Trait lub kilku warunków „where”.
  • Zapewniono automatyczne przedłużenie czasu życia wartości tymczasowych używanych w konstrukcjach „match” i „if”.

    let a = if true {
    ..;
    &temp() // czas życia zostanie przedłużony
    } else {
    ..;
    &temp() // czas życia zostanie przedłużony
    };

  • Stabilizowano możliwość importowania funkcji main z innych modułów i pakietów crate.
  • Podczas kompilacji standardowej biblioteki w kompilatorze używany jest flaga „-Cforce-frame-pointers=yes”, która dodaje dane potrzebne do rekonstrukcji stosu podczas profilowania programów.
  • Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
    • {integer}::unchecked_add
    • {integer}::unchecked_mul
    • {integer}::unchecked_sub
    • ::split_at_unchecked
    • ::split_at_mut_unchecked
    • ::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • ::is_aligned
    • ::is_aligned
    • NonNull::is_aligned
    • ::len
    • ::len
    • ::is_empty
    • ::is_empty
    • NonNull::::is_empty
    • CStr::count_bytes
    • io::Error::downcast
    • num::NonZero
    • path::absolute
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • A feature 'const' that defines the ability to be used in any context instead of constants is applied in functions:
    • Atomic*::into_inner
    • io::Cursor::new
    • io::Cursor::get_ref
    • io::Cursor::position
    • io::empty
    • io::repeat
    • io::sink
    • panic::Location::caller
    • panic::Location::file
    • panic::Location::line
    • panic::Location::column
  • Stabilizowane
    część możliwości, które można wykorzystać podczas kompilacji do pośredniego przedstawienia Webassembly (WASM).
  • Zrealizowano trzeci poziom wsparcia dla platform aarch64-apple-visionos, aarch64-apple-visionos-sim oraz riscv32ima-unknown-none-elf. Trzeci poziom zakłada podstawowe wsparcie, ale bez zautomatyzowanego testowania, publikacji oficjalnych wersji i weryfikacji możliwości kompilacji kodu.
  • Zrealizowano drugi poziom wsparcia dla docelowych platform aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm oraz x86_64-pc-windows-gnullvm. Drugi poziom wsparcia zapewnia gwarancję kompilacji.

Ponadto organizacja Rust Foundation, która nadzoruje ekosystem związany z językiem Rust, ogłosiła utworzenie konsorcjum «Safety-Critical Rust Consortium», które ma na celu wykorzystanie języka Rust w rozwiązaniach wymagających wysokiej niezawodności (Safety-Critical Software), awaria których może zagrażać życiu ludzi, szkodzić środowisku lub prowadzić do poważnych uszkodzeń sprzętu. Do konsorcjum przystąpiły firmy ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle oraz Woven by Toyota. Do zadań, które będzie realizować konsorcjum należy pisanie przewodników oraz rozwój bibliotek, linterów i statycznych analizatorów, a także zastosowanie metod formalnej weryfikacji niezawodności oraz opracowanie podzbiorów języka dla systemów o wysokiej niezawodności.

Spośród projektów związanych z systemami o wysokiej niezawodności można wymienić Verus — narzędzie do weryfikacji poprawności kodu napisanego w języku Rust. Weryfikacja odbywa się poprzez zdefiniowanie specyfikacji opisującej dopuszczalne zachowanie kodu. Podczas wykonywania kodu wykonawczego Verus sprawdza zgodność ze specyfikacją, aby potwierdzić poprawność działania.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster