Wydanie języka programowania Rust 1.65

Opublikowano wydanie języka programowania ogólnego przeznaczenia Rust 1.65, 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ę ogólnych typów skojarzonych (GAT, Generic Associated Types), które umożliwiają tworzenie aliasów typów powiązanych z innym typem i umożliwiają kojarzenie konstruktorów typów z cechami. cecha Foo { wpisz Bar<'x>; }
  • Zaimplementowano wyrażenie „let... else”, umożliwiające sprawdzenie warunku dopasowania wzorca bezpośrednio w wyrażeniu „let” i wykonanie dowolnego kodu w przypadku niezgodności wzorca. niech Ok(count) = u64::from_str(count_str) else { panika!("Nie można przeanalizować liczby całkowitej: '{count_str}'"); };
  • Zezwalaj na użycie instrukcji break w celu wcześniejszego wyjścia z nazwanych bloków, używając nazwy bloku (etykiety) do identyfikacji bloku, który ma zostać zakończony. niech wynik = 'blok: { zrób_rzecz(); if warunek_not_met() { break 'blok 1; } zrób_następną_rzecz(); if warunek_not_met() { break 'blok 2; } zrób_ostatnią_rzecz(); 3 };
  • Dla systemu Linux dodano możliwość osobnego zapisywania informacji debugowania (split-debuginfo), dostępną wcześniej tylko dla platformy macOS. Po określeniu opcji „-Csplit-debuginfo=unpacked” dane debuginfo w formacie DWARF zostaną zapisane w kilku oddzielnych plikach obiektowych z rozszerzeniem „.dwo”. Określenie „-Csplit-debuginfo=packed” spowoduje utworzenie pojedynczego pakietu w formacie „.dwp”, który będzie zawierał wszystkie dane debuginfo dla projektu. Aby zintegrować debuginfo bezpośrednio z sekcją .debug_* obiektów ELF, możesz użyć opcji „-Csplit-debuginfo=off”.
  • Nowa część API została przeniesiona do kategorii stabilnej, w tym metody i implementacje cech zostały ustabilizowane:
    • std::backtrace::Backtrace
    • Powiązany::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Atrybut „const”, który określa możliwość użycia go w dowolnym kontekście zamiast stałych, wykorzystywany jest w funkcjach <*const T&>::offset_from i <*mut T>::offset_from
  • W ramach ostatniego etapu przenoszenia implementacji protokołu LSP (Language Server Protocol) do rust-analyzer, przestarzała implementacja Rust Language Server (RLS) została zastąpiona serwerem pośredniczącym, który generuje ostrzeżenie z sugestią przejścia na za pomocą analizatora rdzy.
  • Podczas kompilacji włączona jest obsługa wdrażania inline kodu pośredniego MIR, co przyspiesza kompilację typowych pakietów skrzyniowych o 3-10%.
  • Aby przyspieszyć zaplanowane kompilacje, menedżer pakietów Cargo umożliwia sortowanie zadań oczekujących na wykonanie w kolejce.

Dodatkowo można odnotować wywiad na temat wykorzystania języka Rust w Volvo przy opracowywaniu komponentów samochodowych systemów informatycznych. Nie ma planów przepisywania istniejącego i przetestowanego kodu w Rust, ale w przypadku nowego kodu Rust jest jedną z preferowanych opcji poprawy jakości przy niższych kosztach. Grupy robocze związane z wykorzystaniem języka Rust powstały także w stowarzyszeniach motoryzacyjnych AUTOSAR (AUTomotive Open System ARchitecture) i SAE (Society of Automotive Engineers).

Ponadto David Kleidermacher, wiceprezes ds. inżynierii Google, opowiedział o tłumaczeniu kodu używanego w platformie Android do zarządzania kluczami szyfrującymi na Rust, a także o wykorzystaniu Rusta przy implementacji protokołu DNS over HTTPS w stosie dla chipów UWB (Ultra-Wideband) oraz w frameworku wirtualizacyjnym (Android Virtualization Framework) powiązanym z chipem Tensor G2. Nowe stosy dla Bluetooth i Wi-Fi, przepisane w Rust, są również opracowywane dla Androida. Ogólna strategia polega na stopniowym wzmacnianiu bezpieczeństwa, najpierw poprzez konwersję najbardziej podatnych na ataki i najważniejszych komponentów oprogramowania do Rusta, a następnie rozszerzenie na inne powiązane podsystemy. W zeszłym roku język Rust znalazł się na liście języków dopuszczonych do rozwijania platformy Android.

Źródło: opennet.ru

Dodaj komentarz