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 używa kombinacji kontroli wykonywanych w czasie kompilacji, które egzekwują czas życia i własność obiektu, oraz kontroli wykonywanych w czasie działania, które zapewniają prawidłowe dostępy do pamięci, co eliminuje potrzebę korzystania z zbieracza elementów niepożądanych.
Rust oferuje wiele nowoczesnych funkcji językowych, które pozwalają programistom zwiększyć produktywność i pewność siebie w przypadku kodu:
- Bezpieczne programowanie równoległe – łatwość, z jaką użytkownicy mogą pisać wydajny kod bezpieczny w zakresie wątków, zaowocowała sloganem 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 (np. oprawy Newtype i warianty enum z zawartością).
- Bardziej skuteczne sprawdzanie w czasie kompilacji – więcej błędów wykrytych w czasie kompilacji zwiększa pewność programistów, że gdy kod zostanie skompilowany, będzie działał zgodnie z oczekiwaniami.
- Wbudowany framework testowy – Rust zawiera wbudowany framework testowy, w którym testy jednostkowe można umieszczać obok implementacji, co ułatwia uwzględnianie testów jednostkowych.
- Egzekwowanie obsługi błędów – funkcje z możliwością odzyskiwania błędów mogą zwracać typ wyniku, który będzie albo wariantem powodzenia, albo wariantem błędu. Kompilator wymaga, aby wywołujący sprawdzali i obsługiwali wariant błędu typu
Result
zwracanego przez wywołanie funkcji. Pozwala to zmniejszyć ryzyko wystąpienia błędów wynikających z nieobsługiwanych błędów. - Inicjowanie – Rust wymaga, aby każda zmienna przed użyciem była inicjowana do legalnego elementu typu, co zapobiega niezamierzonemu inicjowaniu do wartości niebezpiecznej.
- Bezpieczniejsze przetwarzanie liczb całkowitych – wszystkie konwersje typu liczba całkowita są jawnymi konwersjami. Deweloperzy nie mogą przypadkowo rzutować podczas wywołania funkcji, przy przypisywaniu zmiennej ani podczas próby wykonania operacji arytmetycznej z innymi typami. Sprawdzanie przepełnienia jest domyślnie włączone w Rust na Androidzie, co wymaga, aby operacje przepełnienia były jawne.
Więcej informacji znajdziesz w tej serii postów na blogu dotyczących obsługi Rust na Androida:
- Rust na platformie Androida
Opisuje, dlaczego zespół Androida wprowadził Rust jako nowy język platformy. - Integracja Rust w projekcie Android Open Source
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
Omówienie podejścia do współdziałania Rust/C++ na platformie Android.