מבוא ל-Rust ב-Android

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

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

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

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