Opublikowano wersję języka programowania Rust 1.94, który został stworzony przez projekt Mozilla, a obecnie jest rozwijany pod patronatem niezależnej organizacji non-profit Rust Foundation. Język koncentruje się na bezpiecznym zarządzaniu pamięcią i oferuje narzędzia umożliwiające osiągnięcie wysokiego poziomu równoległości wykonania zadań, przy tym omijając konieczność korzystania z garbage collectora i runtime (runtime sprowadza się do podstawowej inicjalizacji oraz utrzymania standardowej biblioteki).
Metody zarządzania pamięcią w Rust mają na celu eliminację błędów przy manipulacji wskaźnikami oraz ochronę przed problemami wynikającymi z niskopoziomowego zarządzania pamięcią, takimi jak dostęp do pamięci po jej zwolnieniu, dereferencjonowanie wskaźników zerowych, czy przekroczenie granic bufora itd. Aby ułatwić dystrybucję bibliotek, budowanie oraz zarządzanie zależnościami, projekt rozwija menedżer pakietów Cargo. Wsparcie dla repozytoriów bibliotek zapewnia 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:
- Do typu slice dodano metodę array_windows, która tworzy iterator dla przechodzenia przez fragmenty (slice) w formie „okien” o stałym rozmiarze, przesuwających się o jeden element za każdym razem. W przeciwieństwie do wcześniej dostępnej metody windows, metoda array_windows operuje stałym rozmiarem okna i zwraca przy każdej iteracji odwołanie do tablicy o stałym rozmiarze (&[T; N]) zamiast fragmentu o nieokreślonym rozmiarze (&[T]). Ponieważ rozmiar tablicy jest z góry znany kompilatorowi, można zrezygnować z kontroli granic tablicy na każdym etapie iteracji. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- W plikach konfiguracyjnych menedżera pakietów Cargo (.cargo/config.toml) wprowadzono dyrektywę „include”, umożliwiającą wstawianie treści z innych plików w danym miejscu. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- Do plików z manifestami i plików konfiguracyjnych dodano wsparcie dla nowej wersji języka znaczników TOML 1.1, która wprowadza wsparcie dla wieloliniowych wbudowanych tabel, sekwencji escape „\xHH” do wstawienia szesnastkowego przedstawienia bajtów oraz „\e” do zastąpienia „\u001B”, możliwość pozostawienia przecinka na końcu ostatniego elementu oraz pominięcia wskazania sekund w wartościach czasu. serde = { version = "1.0", features = ["derive"] } teraz można zastąpić przez serde = { version = "1.0", features = ["derive"], }
- Nowa porcja API została wprowadzona do stabilnej wersji, w tym ustabilizowane metody i implementacje traitów:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Wbudowane funkcje dla instrukcji x86 avx512fp16
- Wbudowane funkcje dla instrukcji AArch64 NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Wskaźnik „const” zastosowany w funkcjach:
- f32::mul_add
- f64::mul_add
- Platforma riscv64im-unknown-none-elf została przetłumaczona na trzeci poziom wsparcia. Trzeci poziom obejmuje podstawowe wsparcie, ale bez automatyzacji testów, publikacji oficjalnych kompilacji oraz weryfikacji możliwości budowy kodu.
Dodatkowo można zauważyć ostatnio ogłoszone projekty i wydarzenia związane z Rust:
- Ayrton Muñoz, który kiedyś wdrożył wsparcie dla platformy Sony PlayStation 1 w kompilatorze Rust i pracował nad portowaniem FreeBSD na komputery z chipami Apple Silicon, zrealizował dla FreeBSD możliwość tworzenia komponentów jądra i sterowników urządzeń w języku Rust. Do testowania zaproponowano zestaw wiązań KPI (Kernel Programming Interface), które umożliwiają wykorzystanie kodu w Rust w jądrze FreeBSD, a także stworzony za pomocą tych wiązań sterownik dźwięku virtio (virtio_snd), sterownik HID DockChannel dla klawiatury w M2 MacBook oraz kilka niskopoziomowych sterowników dla subsystemów komputerów Mac na chipach Apple Silicon.
Zauważono, że prace nad wiązaniami Rust prowadzone są od końca 2024 roku. W wiązaniach zrealizowano dotąd jedynie część C-KPI i są one pozycjonowane jako niestabilne, ale w miarę upływu czasu planowane jest doprowadzenie poziomu stabilności do analogicznego interfejsu dla języka C. Proponowany jako przykład sterownik virtio_snd nadaje się do odtwarzania muzyki w QEMU. Przewiduje się, że w 2026 roku wiązania Rust będą wystarczająco stabilne, by zainteresowani programiści mogli zacząć używać ich do pisania kodu.
- Benny Siegert, uczestniczący w rozwoju NetBSD, próbował uzasadnić powody, dla których wsparcie dla języka Rust nie pojawi się w jądrze NetBSD: NetBSD obsługuje architektury, dla których Rust nie jest dostępny; utrzymanie istniejącego narzędzia Rust w pkgsrc wymaga dużych nakładów pracy i jest wspierane jedynie przez kilku programistów; wsparcie Rust w jądrze wymaga włączenia kompilatora Rust do podstawowego systemu; podczas bootstrapowania Rust w NetBSD używana jest przestarzała wersja pakietu binarnego, co jest niedopuszczalne dla samodzielnych dystrybucji rozpowszechnianych w kodzie źródłowym; cykle tworzenia wydań Rust są niezgodne z cyklem rozwoju NetBSD i wsparcia wcześniejszych gałęzi (na przykład, kontynuowane jest wspieranie gałęzi NetBSD 9, wydanej w 2020 roku, w tych warunkach konieczne byłoby dostarczanie i wspieranie sześciolatka kompilatora Rust).
- Opublikowano wydanie wewnętrznej bazy danych Turso 0.5, napisanej w języku Rust, zgodnej z SQLite na poziomie dialektu SQL, formatu plików bazy danych oraz C API. Wśród rozszerzonych funkcji wyróżnia się mechanizm CDC (Change Data Capture) do monitorowania zmian w bazie danych w czasie rzeczywistym, zastosowanie io_uring do asynchronicznego wejścia/wyjścia w Linuxie, wsparcie dla wyszukiwania wektorowego, obecność wyrażenia ALTER do modyfikacji schematu bazy danych, możliwość szyfrowania danych w bazie danych oraz tryb obliczeń inkrementalnych, konstrukcja „BEGIN CONCURRENT”.
- Projekt mający na celu umożliwienie używania standardowej biblioteki Rust w programach uruchamianych po stronie GPU.
- Emuko — emulator RISC-V, napisany w Rust, zdolny do uruchamiania systemu Linux, wspierający kompilację JIT, mogący zapisywać i przywracać migawki stanu.
- RustConn (flatpak) — graficzny interfejs do zarządzania zewnętrznymi połączeniami sieciowymi z innymi hostami, wspierający SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust i SFTP. Kod napisany w Rust przy użyciu GTK4 i Wayland.
- Przedstawiono nową gałąź projektu zlib-rs 0.6, oznaczoną jako pierwsza stabilna wersja, w pełni zgodna z C API zlib i nadająca się do przezroczystej wymiany zlib. Projekt ma na celu stworzenie zabezpieczonego odpowiednika biblioteki kompresji danych zlib. Rozwój prowadzi się z myślą o projekcie zlib-ng, który rozwija wysokowydajną wersję zlib.
- Przedstawiono projekt vcad, rozwijający parametryczny system automatycznego projektowania (CAD), napisany w Rust i integrowany z agentami AI za pomocą protokołu MCP. Wspierane jest modelowanie 3D, symulacja, praca z rysunkami 2D, montaż komponentów, import w formacie STEP oraz eksport w formatach STL/GLB/STEP/DXF.
- Opublikowano system rozpoznawania mowy, napisany w Rust, wykorzystujący model AI Mistral Voxtral Mini 4B Realtime oraz framework uczenia maszynowego Burn. Projekt skoncentrowany na rozpoznawaniu mowy w czasie rzeczywistym w celu tworzenia transkrypcji podczas transmisji strumieniowej.
- Odbyła się premiera narzędzia c2rust 0.22, przeznaczonego do translacji kodu C (C99) do unsafe-representacji w Rust, bliskiej strukturalnie pierwotnemu kodowi w C. Otrzymana robocza struktura może być następnie wykorzystana do stopniowego przekształcania na idiomatyczny Rust i eliminacji bloków unsafe.
Źródło: opennet.ru
