زنگ 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 اضافه نشده‌اند، بنابراین باید صریحاً از core یا std وارد شوند.

  • رفتار اهداف WebAssembly تغییر کرد.
    Rust دیگر برای ساخت‌های WebAssembly، --allow-undefined را به لینکر ارسال نمی‌کند. نمادهای تعریف نشده اکنون به عنوان خطا در طول لینکینگ در نظر گرفته می‌شوند، به جای اینکه به طور خودکار به importهای ماژول "env" تبدیل شوند. این باید خطاهای ساخت و نام‌های نماد نامعتبر را زودتر تشخیص دهد. در صورت نیاز، می‌توان رفتار قدیمی را با استفاده از RUSTFLAGS=-Clink-arg=--allow-undefined یا با مشخص کردن صریح ماژول wasm وارد شده با استفاده از #[link(wasm_import_module = "env")] برگرداند.

  • Cargo اصلاحات امنیتی را دریافت کرده است.
    Rust 1.96.0 دو آسیب‌پذیری را که کاربران رجیستری‌های شخص ثالث را تحت تأثیر قرار می‌داد، برطرف می‌کند. CVE-2026-5223 مربوط به مدیریت پیوندهای نمادین درون فایل‌های فشرده‌ی جعبه: یک بسته‌ی مخرب از یک رجیستری شخص ثالث می‌تواند حافظه‌ی پنهان بسته‌ی دیگری از همان رجیستری را بازنویسی کند. از Rust 1.96.0 به بعد، Cargo آرشیوهای جعبه‌ای حاوی پیوندهای نمادین را رد می‌کند. CVE-2026-5222 این مشکل مربوط به نرمال‌سازی URL در رجیستری Sparse است و در موارد نادر، می‌تواند منجر به ارسال توکن Cargo به یک رجیستری مخرب شود. طبق گفته تیم Rust، کاربران crates.io تحت تأثیر این مشکلات قرار نگرفته‌اند.

  • تغییرات در زبان.
    این نسخه شامل موارد زیر است: چندین اصلاح و بهبود جزئی: اجازه ارسال متغیرهای metavariables expr ماکروها به cfg، اصلاح تبدیل نوع بدون نوع در عبارات تاپل، رفع موارد نادر از نکات استنتاج نوع نادرست برای آرگومان‌های تابع، اضافه شدن پشتیبانی از رجیسترهای برداری s390x در اسمبلی درون‌خطی، و مجاز شدن مجدد حذف دستی ثابت‌ها به عنوان الگو - این مورد، رگرسیون معرفی شده در Rust 1.94.0 را برطرف می‌کند.

  • تغییرات در کامپایلر و پلتفرم‌ها.
    برای Linuxپشتیبانی از Link relaxation برای اهداف LoongArch فعال شده است - یک بهینه‌سازی لینک‌سازی که برخی از انتقال‌ها و فراخوانی‌ها را پس از استقرار کد ساده می‌کند. برای riscv64gc-unknown-fuchsia، پیکربندی پایه به پروفایل RVA22 با پشتیبانی از افزونه‌های برداری به‌روزرسانی شده است.

  • به‌روزرسانی‌های کتابخانه استاندارد
    پشتیبانی از تکرار روی محدوده‌های صحیح غیرصفر اضافه شده است. مشکل مدیریت تنبل آدرس‌های میزبان در SGX از طریق ToSocketAddr نیز برطرف شده است و تعریف حافظه «قابل خواندن/نوشتن» در مستندات و قراردادهای داخلی شفاف‌سازی شده است: اشاره‌گر تهی از تعریف کلی حذف شده است و اکنون استثنائات برای روش‌های خاص به طور جداگانه مشخص شده‌اند.

  • API های پایدار
    از جمله رابط‌های پایدار شده می‌توان به assert_matches!، debug_assert_matches! و پیاده‌سازی‌های From اشاره کرد. برای AssertUnwindSafe ، سلول تنبل و LazyLock و همچنین انواع محدوده و تکرارکننده‌های جدید از core::range، شامل Range، RangeFrom، RangeToInclusive و تکرارکننده‌های آنها.

  • محموله: تغییرات در وابستگی‌ها و مستندات.
    اکنون یک وابستگی می‌تواند هم مخزن گیت و هم یک رجیستری جایگزین را مشخص کند: نسخه گیت به صورت محلی استفاده می‌شود و نسخه رجیستری در حین انتشار استفاده می‌شود، مشابه رفتاری که با crates.io داشت. پشتیبانی از target.'cfg(..)'.rustdocflags در پیکربندی Cargo نیز اضافه شده است.

  • Rustdoc اکنون مستندات را با دقت بیشتری مدیریت می‌کند.
    یادداشت‌های API منسوخ‌شده اکنون به صورت مستندات معمولی و بدون پردازش ویژه قبلی از طریق white-space: pre-wrap رندر می‌شوند. علاوه بر این، rustdoc دیگر برای عناصر داخل impl، missing_doc_code_examples را lint نمی‌کند و متدها و توابع مرتبط اکنون در نوار کناری مستندات از هم جدا شده‌اند.

  • ناسازگاری‌های احتمالی.
    این نسخه شامل چندین تغییر است که ممکن است در کد غیر استاندارد ظاهر شوند: طرح‌بندی برخی از enumهای #[repr(Int)] در موارد شدید اصلاح شده است، و برخی از تبدیل‌های unsize بی‌فایده در Pin غیرفعال شده‌اند. ، ساخت‌های WebAssembly اکنون روی نمادهای تعریف نشده از کار می‌افتند، ویژگی #![reexport_test_harness_main] که به طور تصادفی تثبیت شده بود، دوباره از حالت قفل ویژگی خارج شده است، گزینه -Csoft-float حذف شده است و حداقل نسخه LLVM خارجی به ۲۱ افزایش یافته است. برای AVR، نوع c_double به f32 تغییر یافته است، زیرا دابل‌های C به طور پیش‌فرض در این اهداف ۳۲ بیتی هستند.

منبع: linux.org.ru

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster