פלטפורמת Android מספקת תמיכה בפיתוח רכיבים מקומיים של מערכת ההפעלה ב-Rust, שפה מודרנית לתכנות מערכות שמספקת ערבויות לאבטחת זיכרון עם ביצועים שדומים ל-C/C++. ב-Rust נעשה שימוש בשילוב של בדיקות בזמן הידור שמאכסחות את משך החיים והבעלות על אובייקטים, ובדיקות בסביבת זמן הריצה שמבטיחות גישה תקינה לזיכרון, וכך מבטלות את הצורך באיסוף אשפה.
ב-Rust יש מגוון תכונות מודרניות של שפה שמאפשרות למפתחים להיות פרודוקטיביים יותר ובטוחים יותר בקוד שלהם:
- תכנות בטוחה במקביל – הקלילות שבה אפשר לכתוב קוד יעיל ומאובטח לשרשור (thread-safe) הובילה ליצירת הסלוגן של Rust, Fearless Concurrency.
- מערכת סוגים יעילה – Rust עוזרת למנוע באגים לוגיים בתוכנה על ידי מתן אפשרות לשימוש בסוגי נתונים יעילים מאוד (כמו חבילות של Newtype ווריאנטים של enum עם תוכן).
- בדיקות חזקות יותר בזמן הידור – ככל שיותרים באגים בזמן הידור, כך המפתחים יכולים להיות בטוחים יותר שהקוד יפעל כמצופה אחרי הידור.
- מסגרת בדיקה מובנית – ב-Rust יש מסגרת בדיקה מובנית שבה אפשר למקם בדיקות יחידה לצד ההטמעה שהן בודקות, כך שקל יותר לכלול בדיקות יחידה.
- אכיפה של טיפול בשגיאות – פונקציות עם כשלים שניתן לשחזר יכולות להחזיר סוג תוצאה, שיהיה וריאנט של הצלחה או וריאנט של שגיאה. המהדרר מחייב את מבצעי הקריאה לבדוק את וריאנט השגיאה של
Result
enum שמוחזר מקריאה לפונקציה ולטפל בו. כך מצטמצם הסיכון לבאגים שנובעים מכשלים שלא טופלו. - הפעלה – ב-Rust כל משתנה צריך להיות מופעל לערך חוקי מהסוג שלו לפני השימוש, כדי למנוע הפעלה לא מכוונת לערך לא בטוח.
- טיפול בטוח יותר במספרים שלמים – כל ההמרות מסוג מספר שלם הן המרות מפורשות. המפתחים לא יכולים לבצע הטמעה בטעות במהלך קריאה לפונקציה, כשמקצים למשתנה או כשמנסים לבצע פעולות חשבון עם סוגים אחרים. בדיקת Overflow מופעלת כברירת מחדל ב-Android עבור Rust, וכתוצאה מכך פעולות Overflow צריכות להיות מפורשות.
למידע נוסף, אפשר לעיין בסדרת הפוסטים בבלוג על תמיכה ב-Rust ל-Android:
- Rust בפלטפורמת Android
סקירה כללית על הסיבות שבגללן צוות Android הציג את Rust כשפת פלטפורמה חדשה. - שילוב Rust בפרויקט Android Open Source
מאמר שמסביר איך הוספנו תמיכה ב-Rust למערכת ה-build, ומתייחס להחלטות מסוימות לגבי העיצוב. - יכולת פעולה הדדית של Rust/C++ בפלטפורמת Android
התייחסות לגישה ליכולת הפעולה ההדדית של Rust/C++ ב-Android.