Platforma Android obsługuje tworzenie natywnych komponentów systemu operacyjnego w języku Rust, nowoczesnym języku programowania systemowego, który zapewnia bezpieczeństwo pamięci i wydajność porównywalną z językami C/C++. Rust wykorzystuje połączenie kontroli w czasie kompilacji, które wymuszają czas życia i własność obiektów, oraz kontroli w czasie działania, które zapewniają prawidłowy dostęp do pamięci, eliminując w ten sposób potrzebę stosowania mechanizmu odśmiecania.
Rust udostępnia szereg nowoczesnych funkcji językowych, które zwiększają produktywność programistów i ich pewność co do kodu:
- Bezpieczne programowanie współbieżne – łatwość, z jaką umożliwia użytkownikom pisanie wydajnego kodu bezpiecznego dla wątków, sprawiła, że Rust zyskał slogan Fearless Concurrency (nieustraszona współbieżność).
- Ekspresyjny system typów – Rust pomaga zapobiegać błędom logicznym w programowaniu, umożliwiając stosowanie bardzo ekspresyjnych typów (takich jak opakowania Newtype i warianty wyliczeniowe z zawartością).
- Silniejsze sprawdzanie w czasie kompilacji – wykrywanie większej liczby błędów w czasie kompilacji zwiększa pewność programistów, że po pomyślnej kompilacji kod będzie działać zgodnie z zamierzeniami.
- Wbudowany framework testowy – Rust udostępnia wbudowany framework testowy, w którym testy jednostkowe można umieszczać obok implementacji, które testują, co ułatwia ich uwzględnianie.
- Egzekwowanie obsługi błędów – funkcje z błędami, które można naprawić, mogą zwracać typ Result, który będzie wariantem powodzenia lub wariantem błędu. Kompilator wymaga, aby wywołujący sprawdzali i obsługiwali wariant błędu wyliczenia
Result
zwracanego przez wywołanie funkcji. Zmniejsza to ryzyko wystąpienia błędów wynikających z nieobsłużonych awarii. - Inicjowanie – Rust wymaga, aby każda zmienna była przed użyciem inicjowana do prawidłowego elementu swojego typu, co zapobiega przypadkowemu inicjowaniu do niebezpiecznej wartości.
- Bezpieczniejsze przetwarzanie liczb całkowitych – wszystkie konwersje typu integer są jawnymi rzutowaniami. Deweloperzy nie mogą przypadkowo rzutować podczas wywołania funkcji przy przypisywaniu do zmiennej ani podczas wykonywania działań arytmetycznych z innymi typami. Sprawdzanie przepełnienia jest domyślnie włączone w Androidzie w przypadku języka Rust, co wymaga jawnego określania operacji przepełnienia.
Więcej informacji znajdziesz w serii postów na blogu o obsłudze języka Rust na Androidzie:
- Rust na platformie Android
Omówienie powodów, dla których zespół Androida wprowadził język Rust jako nowy język platformy. - Integracja języka Rust z projektem Android Open Source
Artykuł omawia, jak wprowadzono obsługę języka Rust w systemie kompilacji i dlaczego podjęto określone decyzje projektowe. - Współdziałanie języków Rust i C++ na platformie Android
Omówienie podejścia do współdziałania języków Rust i C++ na platformie Android.