Platforma Android obsługuje tworzenie komponentów natywnych systemu operacyjnego w języku Rust, który jest nowoczesnym językiem programowania systemowego zapewniającym bezpieczeństwo pamięci przy wydajności porównywalnej z językami C/C++. Rust wykorzystuje kombinację mechanizmów kontroli w czasie kompilacji, które egzekwują czas życia i własność obiektu, oraz mechanizmy kontroli w czasie wykonywania, które zapewniają prawidłowe dostępy do pamięci, co eliminuje potrzebę korzystania z zbieracza.
Rust udostępnia wiele nowoczesnych funkcji językowych, które pozwalają deweloperom zwiększyć produktywność i pewność kodu:
- Bezpieczne programowanie równoległe – łatwość, z jaką użytkownicy mogą pisać wydajny kod bezpieczny w zakresie wątków, zaowocowała hasłem Bezpieczne równoległość.
- System typów o wyraźnych właściwościach – Rust zapobiega błędom logicznego programowania, zezwalając na bardzo wyraziste typy (takie jak opakowania Newtype i warianty enum z zawartością).
- Silniejsze testy podczas kompilacji – więcej błędów wykrywanych w czasie kompilacji zwiększa pewność dewelopera, że poprawnie skompilowany kod działa zgodnie z oczekiwaniami.
- Wbudowana platforma testowania – Rust udostępnia wbudowaną platformę testowania, za pomocą której obok testowanej implementacji można przeprowadzać testy jednostkowe, co ułatwia ich uwzględnianie.
- Egzekwowanie obsługi błędów – funkcje z odwracalnymi błędami mogą zwracać typ wyniku, który będzie albo wariantem powodzenia, albo wariantem błędu. Kompilator wymaga od elementów wywołujących sprawdzenie i obsługa wariantu błędu wyliczenia
Result
zwróconego z wywołaniem funkcji. Dzięki temu zmniejsza się prawdopodobieństwo wystąpienia błędów wynikających z nieobsługiwanych błędów. - Inicjacja – w przypadku Rust każda zmienna musi zostać zainicjowana w elemencie prawnym danego typu przed użyciem, co zapobiega przypadkowemu zainicjowaniu niebezpiecznej wartości.
- Bezpieczniejsza obsługa liczb całkowitych – wszystkie konwersje typu całkowite są jednoznaczne. Deweloperzy nie mogą przypadkowo rzutować podczas wywołania funkcji, przy przypisywaniu zmiennej ani podczas próby wykonania operacji arytmetycznej na innych typach. Sprawdzanie przepełnienia jest domyślnie włączone w Androidzie w wersji Rust, które wymaga jawności działań nadmiarowych.
Więcej informacji znajdziesz w tej serii postów na blogu o wsparciu dla Rust na Androida:
- Rust na platformie Androida
Omówienie tego, dlaczego zespół Androida wprowadził usta jako nowy język platformy. - Integrating Rust into the Android Open Source Project
Omówienie sposobu wprowadzenia obsługi Rust do systemu kompilacji oraz powodów podjęcia określonych decyzji projektowych. - Współdziałanie Rust/C++ na platformie Android
Omawia podejście do współdziałania Rust/C++ na platformie Android.