Wprowadzenie do Rust na Androida

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: