מבוא ל-Rust ב-Android

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

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

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

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