חלודה 1.96.0

ההודעה פורסמה חלודה 1.96.0 — הגרסה היציבה האחרונה של שפת התכנות Rust. העדכון יצא לאור. 28 2026 מאי שנהניתן להתקין אותו באמצעות הפקודה הסטנדרטית rustup update stable. השינויים העיקריים כוללים סוגי טווח חדשים ב-core::range, ייצוב פקודות מאקרו של התאמת תבניות, הידוק התנהגות הבנייה של WebAssembly ותיקונים לשתי פגיעויות ב-Cargo.

שינויים גדולים

  • סוגי טווחים חדשים core::range::Range*.
    סוגי טווחים חדשים התייצבו בספרייה הסטנדרטית: core::range::Range, RangeFrom, RangeInclusive, והאיטרטורים המשויכים אליהם. שלא כמו הסוגים הישנים מ-core::ops, הטווחים החדשים אינם מיישמים את Iterator ישירות, אלא מומרים לאיטורטור דרך IntoIterator. זה מאפשר להעתיק את הטווחים הללו, וזה נוח, למשל, בעת אחסון טווח כשדה מבנה. תחביר כמו 0..1 יוצר כרגע את סוגי הטווחים הישנים, אך מתוכנן להעביר אותו לסוגים החדשים בגרסה עתידית של השפה.

  • נוספו הפקודות assert_matches! ו- debug_assert_matches!.
    פקודות מאקרו חדשות מאפשרות לך לבדוק שערך תואם לתבנית נתונה. זה דומה במושג ל- assert!(matches!(…)), אך במקרה של שגיאה, מודפס ייצוג ניפוי שגיאות של הערך, מה שמפשט את האבחון. פקודות מאקרו אלו לא נוספו ל- Prelude כדי למנוע התנגשויות עם crates פופולריים של צד שלישי, לכן יש לייבא אותן במפורש מ- core או std.

  • שינו את התנהגות יעדי WebAssembly.
    חלודה כבר לא מעבירה --allow-undefined לקישור עבור בניית WebAssembly. סמלים לא מוגדרים מטופלים כעת כשגיאות במהלך הקישור, במקום להיות מומרים אוטומטית לייבוא ​​מהמודול "env". פעולה זו אמורה לתפוס שגיאות בנייה ושמות סמלים לא חוקיים מוקדם יותר. ניתן לבטל את ההתנהגות הישנה, ​​במידת הצורך, באמצעות RUSTFLAGS=-Clink-arg=--allow-undefined או על ידי ציון מפורש של מודול ה-wasm המיובא באמצעות #[link(wasm_import_module = "env")].

  • מטען קיבל תיקוני אבטחה.
    Rust 1.96.0 מתקנת שתי פגיעויות המשפיעות על משתמשי רישומי צד שלישי. CVE-2026-5223 קשור לטיפול בקישורי סימבוליות בתוך קבצי tarball של crate: חבילה זדונית מרגיסטר של צד שלישי עלולה להחליף את המטמון של חבילה אחרת מאותו רישום. החל מ-Rust 1.96.0, Cargo דוחה ארכיוני crate המכילים קישורי סימבוליות. CVE-2026-5222 בעיה זו קשורה לנרמול כתובות URL ברישום הדליל, ובנסיבות נדירות, עלולה לגרום לשליחת אסימון Cargo לרישום זדוני. לדברי צוות Rust, משתמשי crates.io אינם מושפעים מבעיות אלו.

  • שינויים בשפה.
    השחרור כולל: מספר תיקונים ושיפורים קלים: אפשרו העברת מטא-משתני expr של פקודות מאקרו ל-cfg, תוקנו עיבוד של never-type בביטויי tuple, תוקנו מקרים נדירים של רמזים שגויים להסקת סוג עבור ארגומנטים של פונקציות, נוספה תמיכה באוגרי וקטור s390x בהרכבה מוטבעת, והותר מחדש קבועי ManuallyDrop כתבניות - פעולה זו מתקן רגרסיה שהוצגה ב-Rust 1.94.0.

  • שינויים בקומפיילר ובפלטפורמות.
    עבור Linuxתמיכה בהרפיית קישורים הופעלה עבור יעדי LoongArch - אופטימיזציה של קישורים שמפשטת מעברים וקריאות לאחר פריסת קוד. עבור riscv64gc-unknown-fuchsia, תצורת הבסיס עודכנה לפרופיל RVA22 עם תמיכה בהרחבות וקטוריות.

  • עדכוני ספרייה סטנדרטיים.
    נוספה תמיכה באיטרציה על פני טווחי מספרים שלמים שאינם אפס. תוקן גם טיפול עצל בכתובות מארח ב-SGX דרך ToSocketAddr, וההגדרה של זיכרון "ניתן לקריאה/כתיבה" הובהרה בתיעוד ובחוזים הפנימיים: מצביע ה-null הוסר מההגדרה הכללית, וחריגים מוגדרים כעת בנפרד עבור מתודות ספציפיות.

  • ממשקי API יציבים.
    בין הממשקים המיוצבים נמצאים assert_matches!, debug_assert_matches!, יישומים של From עבור AssertUnwindSafe , לייזיסל ו-LazyLock , כמו גם סוגי טווחים חדשים ואיטרטורים מ- core::range, כולל Range, RangeFrom, RangeToInclusive והאיטרטורים שלהם.

  • מטען: שינויים בתלות ובתיעוד.
    תלויות יכולה כעת לציין גם מאגר Git וגם רישום חלופי: גרסת Git תשמש באופן מקומי, וגרסת הרישום תשמש במהלך הפרסום, בדומה להתנהגות עם crates.io. נוספה גם תמיכה ב- target.'cfg(..)'.rustdocflags בתצורת Cargo.

  • Rustdoc מטפל כעת בתיעוד בצורה מדויקת יותר.
    הערות API שהוצאו משימוש מוצגות כעת כתיעוד רגיל, ללא העיבוד המיוחד הקודם באמצעות רווח לבן: pre-wrap. בנוסף, rustdoc כבר לא מבצע חיפוש ב-missing_doc_code_examples עבור אלמנטים בתוך impl, והמתודות והפונקציות הקשורות מופרדות כעת בסרגל הצד של התיעוד.

  • אי התאמות אפשריות.
    הגרסה מכילה מספר שינויים שעשויים להופיע בקוד שאינו סטנדרטי: הפריסה של חלק מהקודים #[repr(Int)] תוקנה במקרים קיצוניים, וכמה יצירות חסרות תועלת ב-Pin הושבתו. , בניית WebAssembly קורסת כעת על סמלים לא מוגדרים, התכונה #![reexport_test_harness_main] שהתייצבה בטעות עברה שוב גישה לתכונות, האפשרות -Csoft-float הוסרה, וגרסת ה-LLVM החיצונית המינימלית הוגדלה ל-21. עבור AVR, סוג c_double שונה ל-f32, מכיוון ש-C double הם 32 סיביות כברירת מחדל במטרות אלו.

מקור: linux.org.ru

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster