פרסום שפת התכנות למטרות כלליות Rust 1.66, שנוסדה על ידי פרויקט מוזילה, אך פותחה כעת בחסות העמותה העצמאית Rust Foundation. השפה מתמקדת בבטיחות זיכרון ומספקת את האמצעים להשגת מקביליות עבודה גבוהה תוך הימנעות משימוש באספן אשפה וזמן ריצה (זמן הריצה מצטמצם לאתחול ותחזוקה בסיסיים של הספרייה הסטנדרטית).
שיטות הטיפול בזיכרון של Rust חוסכות מהמפתח שגיאות בעת מניפולציה של מצביעים ומגינות מפני בעיות המתעוררות עקב טיפול בזיכרון ברמה נמוכה, כגון גישה לאזור זיכרון לאחר שחרורו, זיהוי מצביעי null, חריגות מאגר וכו'. כדי להפיץ ספריות, לספק בנייה ולנהל תלות, הפרויקט מפתח את מנהל החבילות Cargo. מאגר crates.io נתמך לאירוח ספריות.
בטיחות זיכרון מסופקת ב-Rust בזמן הקומפילציה באמצעות בדיקת הפניות, מעקב אחר בעלות על אובייקט, מעקב אחר משך חיים של אובייקט (סקופים), והערכת נכונות הגישה לזיכרון במהלך ביצוע קוד. Rust מספקת גם הגנה מפני הצפת מספרים שלמים, דורשת אתחול חובה של ערכי משתנים לפני השימוש, מטפלת בשגיאות טוב יותר בספרייה הסטנדרטית, מיישמת את הרעיון של הפניות ומשתנים בלתי ניתנים לשינוי כברירת מחדל, מציעה הקלדה סטטית חזקה כדי למזער שגיאות לוגיות.
חידושים עיקריים:
- בספירות עם ייצוגים שלמים (התכונה "#[repr(Int)]", מותרת ציון מפורש של המבחין (מספר האופציה בספירה), גם אם הספירה מכילה שדות. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
- נוספה פונקציית core::hint::black_box, שפשוט מחזירה את הערך שהתקבל. מכיוון שהמהדר מאמין שפונקציה נתונה עושה דבר ספציפי, ניתן להשתמש בפונקציית black_box כדי לנטרל את האופטימיזציה של לולאות המהדר בעת ביצוע בדיקת ביצועי קוד או בעת בחינת קוד מכונה שנוצר (כדי שהמהדר לא יחשיב את הקוד בלתי שמיש ולהסיר זה). לדוגמה, בדוגמה למטה, ציון black_box(v.as_ptr()) מונע מהמהדר להניח שהווקטור v אינו בשימוש. השתמש ב-std::hint::black_box; fn push_cap(v: &mut Vec) { עבור i ב-0..4 { v.push(i); black_box(v.as_ptr()); } }
- מנהל החבילות "cargo" מציע את הפקודה "remove", המאפשרת להסיר תלות מהמניפסט של Cargo.toml משורת הפקודה.
- חלק חדש של ה-API הועבר לקטגוריה של יציב, כולל השיטות והיישום של תכונות התייצבו:
- proc_macro::Span::source_text
- u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
- i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
- i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
- BTreeSet::{first, last, pop_first, pop_last}
- BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
- הוסף יישומי AsFd עבור סוגי נעילת stdio בעת שימוש ב-WASI.
- impl TryFrom > עבור תיבה<[T; N]>
- core::hint::black_box
- משך::try_from_secs_{f32,f64}
- Option:: unzip
- std::os::fd
- השימוש בטווחים "..X" ו- "..=X" מותר בתבניות.
- בעת הרכבת ה-frontend של מהדר rustc וה-backend של LLVM, נעשה שימוש במצבי אופטימיזציה LTO (Link Time Optimization) ו-BOLT (Binary Optimization and Layout Tool), המאפשרים הגדלת ביצועי הקוד המתקבל והפחתת צריכת הזיכרון.
- רמת התמיכה השלישית יושמה עבור הפלטפורמות armv5te-none-eabi ו-thumbv5te-none-eabi. הרמה השלישית כוללת תמיכה בסיסית, אך ללא בדיקות אוטומטיות, פרסום בונים רשמיים או בדיקה אם ניתן לבנות את הקוד.
- נוספה תמיכה בקישור עם ספריות אוניברסליות של macOS.
בנוסף, אנו יכולים לציין את הכללת הקצה הקדמי של מהדר שפת Rust (gccrs) בבסיס הקוד של GCC. ה-frontend כלול בסניף GCC 13, אשר ישוחרר במאי 2023. החל מ-GCC 13, ניתן להשתמש בכלי GCC המקוריים כדי להדר תוכניות בשפת Rust ללא צורך בהתקנת מהדר rustc, שנבנה באמצעות פיתוחי LLVM. ההטמעה של GCC 13 של Rust תהיה גרסת בטא, לא מופעלת כברירת מחדל.
מקור: OpenNet.ru
