פורסם שחרורו של שפת התכנות המערכתית Rust 1.56, שנוסדה על ידי פרויקט מוזילה, אך כעת פותחה בחסות העמותה העצמאית Rust Foundation. בנוסף למספר הגרסה הרגיל, המהדורה נקראת גם Rust 2021 ומסמנת התייצבות של השינויים שהוצעו בשלוש השנים האחרונות. Rust 2021 ישמש גם כבסיס להגברת הפונקציונליות בשלוש השנים הבאות, בדומה לאופן שבו שחרור Rust 2018 הפך לבסיס לפיתוח השפה בשלוש השנים האחרונות.
כדי לשמור על תאימות, מפתחים יכולים להשתמש בתוויות "2015", "2018" ו-"2021" בתוכנות שלהם, מה שמאפשר לקשר תוכניות לפרוסות מצב שפה התואמות למהדורות שנבחרו של Rust. מהדורות הוצגו כדי להפריד בין שינויים בלתי תואמים ומוגדרות במטא נתונים של חבילות מטען דרך השדה "מהדורה" בסעיף "[חבילה]". לדוגמה, מהדורת "2018" כוללת את הפונקציונליות שהתייצבה מסוף 2018 ומכסה גם את כל השינויים הנוספים שאינם מפרים את התאימות. מהדורת 2021 כוללת בנוסף תכונות שוברות יכולת פעולה הדדית המוצעות במהדורה הנוכחית של 1.56 ומאושרת ליישום עתידי. בנוסף לשפה עצמה, העורכים לוקחים בחשבון גם את מצב הכלים והתיעוד.
אי-התאמות העיקריות שתועדו ב-Rust 2021:
- לכידה נפרדת בסגירות - סגירות יכולות כעת ללכוד שמות שדות בודדים במקום המזהה כולו. לדוגמה, "|| ax + 1" ילכוד רק "גרזן" במקום "א".
- התכונה IntoIterator עבור מערכים: array.into_iter() מאפשרת לך לחזור על רכיבי מערך לפי ערכים, ולא לפי הפניות.
- העיבוד של ביטויי "|" השתנה ב-macro_rules (בוליאנית OR) בתבניות - מפרט ":pat" בהתאמות מכבד כעת את "A | ב".
- מנהל חבילות המטען כולל כברירת מחדל את הגרסה השנייה של פותר התכונות, שתמיכה בה הופיעה ב- Rust 1.51.
- התכונות TryFrom, TryInto ו-FromIterator נוספו למודול הספרייה הסטנדרטי.
- פקודות המאקרו הפאניקה!(..) ו-assert!(expr, ..) משתמשות כעת תמיד ב-format_args!(..) כדי לעצב מחרוזות, בדומה ל-println!().
- הביטויים ident#, ident»..." ו-ident'...' שמורים בתחביר השפה.
- העבירו אזהרות של אובייקטים_רק_תכונות ו-ellipsis_inclusive_range_patterns לשגיאות.
חדש בחלודה 1.56:
- ב-Cargo.toml, בסעיף "[חבילה]", נוסף שדה גרסת החלודה, שדרכו ניתן לקבוע את הגרסה המינימלית הנתמכת של Rust עבור חבילת הארגז. אם הגרסה הנוכחית לא תואמת את הפרמטר שצוין, Cargo תפסיק לעבוד עם הודעת שגיאה.
- בעת התאמת דפוסים באמצעות ביטויי "binding @ pattern", ניתנת תמיכה לציון כריכות נוספות (לדוגמה, "let matrix @ Matrix { row_len, .. } = get_matrix();").
- חלק חדש של ה-API הועבר לקטגוריה של יציב, כולל השיטות והיישום של תכונות התייצבו:
- std::os::unix::fs::chroot
- UnsafeCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
- Vec::shrink_to
- מחרוזת::shink_to
- OsString::shrink_to
- PathBuf::shrink_to
- BinaryHeap::shrink_to
- VecDeque::shrink_to
- HashMap::shrink_to
- HashSet::shrink_to
- התכונה "const", הקובעת את האפשרות להשתמש בכל הקשר במקום בקבועים, משמשת בפונקציות
- std::mem::transmute
- [T]::ראשון
- [T]::split_first
- [T]::אחרון
- [T]::split_last
- המהדר הועבר לשימוש בגרסה 13 של LLVM.
- רמה שנייה של תמיכה יושמה עבור פלטפורמת aarch64-apple-ios-sim ורמה שלישית עבור פלטפורמות powerpc-unknown-freebsd ו-riscv32imc-esp-espidf. הרמה השלישית כוללת תמיכה בסיסית, אך ללא בדיקות אוטומטיות, פרסום בונים רשמיים או בדיקה אם ניתן לבנות את הקוד.
נזכיר כי Rust מתמקדת בבטיחות זיכרון, מספקת ניהול זיכרון אוטומטי, ומספקת את האמצעים להשגת מקביליות גבוהה בביצוע העבודה ללא שימוש באספן אשפה או זמן ריצה (זמן הריצה מצטמצם לאתחול ותחזוקה בסיסיים של הספרייה הסטנדרטית).
ניהול הזיכרון האוטומטי של Rust מבטל שגיאות בעת מניפולציה של מצביעים ומגן מפני בעיות הנובעות ממניפולציה של זיכרון ברמה נמוכה, כגון גישה לאזור זיכרון לאחר שחרורו, הפניית מצביע אפסית, חריגות מאגר וכו'. כדי להפיץ ספריות, להבטיח הרכבה ולנהל תלות, הפרויקט מפתח את מנהל החבילות Cargo. מאגר crates.io נתמך לאירוח ספריות.
מקור: OpenNet.ru
