ورژن جدید Rust تازه منتشر شده و قراره یه نگاه به جدیدترین تغییراتش بندازیم.
1. اضافه شدن رنج تایپ های جدید
تا الان Rangeها Iterator رو پیاده سازی میکردن، در نتیجه امکان Copy بودن نداشتن. از این نسخه، نوعهای جدیدی اضافه شده که IntoIterator دارند و میتونن Copy باشن.
حالا امکانش هست که slice accessorها رو بدون جدا کردن start و end در نوعهای Copy ذخیره کرد.
use core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range<usize>);
impl Span {
pub fn of(self, s: &str) -> &str {
&s[self.0]
}
}
2. ماکروهای assert_matches برای بررسی تطابق الگو با مقدار اضافه شدن. این ماکروها به prelude اضافه نشدن و برای جلوگیری از تداخل با سایر crateها، باید از core یا std ایمپورت بشن.
use core::assert_matches;
fn get_random_number() -> u32 { 4 }
assert_matches!(get_random_number(), 1..=6);
3. از این نسخه، --allow-undefined به linker ارسال نمیشه. یعنی undefined symbolها الان خطای linker میدن نه اینکه خودکار به import تبدیل بشن. برای برگشتن به حالت قبلی:
RUSTFLAGS=-Clink-arg=--allow-undefined
4. لیست API های جدید
assert_matches!5. رفع دو آسیبپذیری در Cargo
debug_assert_matches!
From<T> for AssertUnwindSafe<T>
From<T> for LazyCell<T, F>
From<T> for LazyLock<T, F>
core::range::RangeToInclusive
core::range::RangeFrom
core::range::RangeFromIter
core::range::Range
core::range::RangeIter
- CVE-2026-5223 (معمولی): مشکل استخراج tarball با symlink
- CVE-2026-5222 (کم اهمیت): مشکل احراز هویت با URLهای نرمالشده
منبع: RustLangBlog
#rust #new
☕️ Telegram | Website | Discord