מבוא ל-Rust ב-Android

פלטפורמת Android מספקת תמיכה בפיתוח רכיבים מקומיים של מערכת ההפעלה ב-Rust, שפה מודרנית לתכנות מערכות שמספקת ערבויות לאבטחת זיכרון עם ביצועים שדומים ל-C/C++‎. ב-Rust נעשה שימוש בשילוב של בדיקות בזמן הידור שמחייבות את משך החיים והבעלות של האובייקט, ובדיקות בסביבת זמן הריצה שמבטיחות גישה תקינה לזיכרון, וכך מבטלות את הצורך באיסוף אשפה.

ב-Rust יש מגוון תכונות מודרניות של שפה שמאפשרות למפתחים להיות פרודוקטיביים יותר ובטוחים יותר בקוד שלהם:

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

למידע נוסף, כדאי לעיין בסדרת הפוסטים בבלוג בנושא התמיכה ב-Android Rust: