Platforma Android zapewnia wsparcie dla tworzenia natywnych komponentów systemu operacyjnego w Rust, nowoczesnym języku programowania systemów, który zapewnia gwarancję bezpieczeństwa pamięci z wydajnością porównywalną z C/C++. Rust wykorzystuje kombinację kontroli w czasie kompilacji, które wymuszają czas życia i własność obiektu, oraz kontroli w czasie wykonywania, które zapewniają prawidłowy dostęp do pamięci, eliminując w ten sposób potrzebę modułu zbierającego elementy bezużyteczne.
Rust zapewnia szereg nowoczesnych funkcji językowych, które pozwalają programistom na większą produktywność i pewność pracy nad kodem:
- Bezpieczne programowanie współbieżne — łatwość, z jaką umożliwia to użytkownikom pisanie wydajnego, bezpiecznego dla wątków kodu, dała początek sloganowi Rust Fearless Concurrency .
- System typów ekspresyjnych — Rust pomaga zapobiegać błędom programowania logicznego, umożliwiając stosowanie typów wysoce ekspresyjnych (takich jak opakowania Newtype i warianty wyliczeń z zawartością).
- Silniejsze kontrole w czasie kompilacji — więcej błędów wykrytych w czasie kompilacji zwiększa pewność programistów, że pomyślnie skompilowany kod działa zgodnie z zamierzeniami.
- Wbudowane środowisko testowe — Rust zapewnia wbudowaną strukturę testową, w której testy jednostkowe można umieścić obok testowanej implementacji, co ułatwia włączenie testów jednostkowych.
- Wymuszanie obsługi błędów — funkcje z możliwymi do naprawienia błędami mogą zwracać typ wyniku , który będzie wariantem powodzenia lub wariantem błędu. Kompilator wymaga, aby osoby wywołujące sprawdziły i obsłużyły wariant błędu wyliczenia
Result
zwróconego z wywołania funkcji. Zmniejsza to ryzyko wystąpienia błędów wynikających z nieobsługiwanych błędów. - Inicjalizacja - Rust wymaga, aby każda zmienna została zainicjowana do legalnego elementu tego typu przed użyciem, co zapobiega niezamierzonej inicjalizacji do niebezpiecznej wartości.
- Bezpieczniejsza obsługa liczb całkowitych — wszystkie konwersje typu całkowitego są jawnymi rzutowaniami. Programiści nie mogą przypadkowo rzutować podczas wywołania funkcji podczas przypisywania zmiennej lub podczas próby wykonania operacji arytmetycznych na innych typach. Sprawdzanie przepełnienia jest domyślnie włączone w systemie Android dla Rust, co wymaga jawnych operacji przepełnienia.
Aby uzyskać więcej informacji, zobacz serię wpisów na blogu na temat obsługi Androida Rust:
- Rdza na platformie Android
Zawiera przegląd powodów, dla których zespół Androida wprowadził Rust jako nowy język platformy. - Integracja Rusta z projektem Android Open Source
Omawia, w jaki sposób obsługa Rusta została wprowadzona do systemu kompilacji i dlaczego podjęto pewne decyzje projektowe. - Współpraca Rust/C++ na platformie Android
Omawia podejście do interoperacyjności Rust/C++ w systemie Android.