Pas 1.96.0

Buraxılış dərc edilib Pas 1.96.0 — Rust proqramlaşdırma dilinin ən son stabil versiyası. Yeniləmə yayımlandı. 28 May 2026 il; standart rustup update stable əmrindən istifadə edərək quraşdırıla bilər. Əsas dəyişikliklərə core::range-da yeni diapazon növləri, nümunə uyğunluğu makrolarının sabitləşdirilməsi, WebAssembly qurma davranışının sərtləşdirilməsi və Cargo-da iki zəifliyin düzəldilməsi daxildir.

Əsas dəyişikliklər

  • Yeni diapazon növləri core::range::Range*.
    Standart kitabxanada yeni diapazon növləri sabitləşdirilib: core::range::Range, RangeFrom, RangeInclusive və onlarla əlaqəli iteratorlar. core::ops-dakı köhnə tiplərdən fərqli olaraq, yeni diapazonlar birbaşa Iterator tətbiq etmir, lakin IntoIterator vasitəsilə iteratora çevrilir. Bu, bu diapazonların kopyalana bilən olmasına imkan verir ki, bu da, məsələn, diapazonu struktur sahəsi kimi saxlayarkən rahatdır. 0..1 kimi sintaksis hazırda köhnə diapazon tiplərini yaradır, lakin dilin gələcək versiyasında yeni tiplərə köçürülməsi planlaşdırılır.

  • assert_matches! və debug_assert_matches! əlavə edildi.
    Yeni makrolar, bir dəyərin verilmiş bir şablona uyğun olub olmadığını yoxlamağa imkan verir. Bu, konsepsiya baxımından assert!(matches!(…)) ilə oxşardır, lakin səhv olduqda, dəyərin ayıklama təsviri çap olunur və bu da diaqnostikanı asanlaşdırır. Bu makrolar məşhur üçüncü tərəf qutuları ilə ziddiyyətlərin qarşısını almaq üçün Prelude-a əlavə edilməmişdir, buna görə də onlar açıq şəkildə core və ya std-dən idxal edilməlidir.

  • WebAssembly hədəflərinin davranışını dəyişdirdi.
    Rust artıq WebAssembly qurğuları üçün --allow-undefine funksiyasını linkerə ötürmür. Təyin olunmamış simvollar artıq "env" modulundan avtomatik olaraq idxallara çevrilmək əvəzinə, linkləmə zamanı səhv kimi qəbul edilir. Bu, qurğu səhvlərini və etibarsız simvol adlarını daha əvvəl aşkar etməlidir. Lazım gələrsə, köhnə davranış RUSTFLAGS=-Clink-arg=--allow-undefine funksiyasından istifadə etməklə və ya #[link(wasm_import_module = "env")] funksiyasından istifadə edərək idxal edilmiş wasm modulunu açıq şəkildə göstərməklə geri qaytarıla bilər.

  • Cargo təhlükəsizlik düzəlişləri alıb.
    Rust 1.96.0, üçüncü tərəf reyestrlərinin istifadəçilərinə təsir edən iki zəifliyi aradan qaldırır. CVE-2026-5223 Kaset tartopları daxilində simvolik linklərin idarə olunması ilə əlaqəli: üçüncü tərəf reyestrindən zərərli paket eyni reyestrdən başqa bir paketin keş yaddaşını yenidən yaza bilər. Rust 1.96.0 versiyasından başlayaraq, Cargo simvolik linklər olan kaset arxivlərini rədd edir. CVE-2026-5222 Bu problem seyrək reyestrdə URL normallaşdırılması ilə əlaqədardır və nadir hallarda zərərli reyestrə Cargo tokeninin göndərilməsi ilə nəticələnə bilər. Rust komandasına görə, crates.io istifadəçiləri bu problemlərdən təsirlənmir.

  • Dildəki dəyişikliklər.
    Buraxılışa aşağıdakılar daxildir: Bir neçə kiçik düzəliş və təkmilləşdirmə: Makroların expr metadəyişkənlərinin cfg-yə ötürülməsinə icazə verildi, cüt ifadələrdə heç vaxt tipli tökmə düzəldildi, funksiya arqumentləri üçün səhv tipli nəticə çıxarma göstərişlərinin nadir halları düzəldildi, daxili montajda s390x vektor registrləri üçün dəstək əlavə edildi və şablon kimi ManuallyDrop sabitlərinə yenidən icazə verildi - bu, Rust 1.94.0-da təqdim edilən reqressiyanı düzəldir.

  • Kompilyator və platformalarda dəyişikliklər.
    Uğrunda LinuxKod yerləşdirildikdən sonra bəzi keçidləri və çağırışları sadələşdirən keçid optimallaşdırması olan LoongArch hədəfləri üçün link relaksasiyası dəstəyi aktivləşdirilib. riscv64gc-unknown-fuchsia üçün baza konfiqurasiyası vektor uzantıları dəstəyi ilə RVA22 profilinə yenilənib.

  • Standart kitabxana yeniləmələri.
    Non-Sıfır tam ədəd diapazonları üzərindən təkrarlama dəstəyi əlavə edildi. SGX-də ToSocketAddr vasitəsilə host ünvanlarının tənbəl işlənməsi də düzəldildi və sənədlərdə və daxili müqavilələrdə "oxuna/yazıla bilən" yaddaş tərifi aydınlaşdırıldı: sıfır göstəricisi ümumi tərifdən çıxarıldı və istisnalar artıq müəyyən metodlar üçün ayrıca göstərildi.

  • Sabitləşdirilmiş API-lər.
    Sabitləşdirilmiş interfeyslər arasında assert_matches!, debug_assert_matches!, From tətbiqləri var. AssertUnwindSafe üçün , LazyCell və LazyLock , eləcə də core::range-dan yeni diapazon növləri və iteratorları, o cümlədən Range, RangeFrom, RangeToInclusive və onların iteratorları.

  • Yük: Asılılıqlarda və sənədlərdə dəyişikliklər.
    Artıq asılılıq həm Git deposu, həm də alternativ reyestri təyin edə bilər: Git versiyası lokal olaraq istifadə ediləcək və reyestr versiyası dərc zamanı istifadə olunacaq, bu da crates.io ilə davranışa bənzəyir. Cargo konfiqurasiyasında target.'cfg(..)'.rustdocflags üçün dəstək də əlavə edilib.

  • Rustdoc artıq sənədləri daha dəqiq idarə edir.
    Köhnəlmiş API qeydləri artıq əvvəlki xüsusi emal olmadan, white-space: pre-wrap vasitəsilə adi sənədləşmə kimi göstərilir. Bundan əlavə, rustdoc artıq impl daxilindəki elementlər üçün missing_doc_code_examples funksiyasını işləmir və metodlar və əlaqəli funksiyalar artıq sənədlərin yan panelində ayrılır.

  • Mümkün uyğunsuzluqlar.
    Buraxılışda qeyri-standart kodda görünə biləcək bir neçə dəyişiklik var: bəzi #[repr(Int)] enumlarının düzülüşü həddindən artıq hallarda düzəldilib və Pin-dəki bəzi yararsız unsize cast-lar deaktiv edilib. , WebAssembly quruluşları artıq təyin olunmamış simvollar üzərində çökür, təsadüfən sabitləşdirilmiş #![reexport_test_harness_main] atributu yenidən funksiyaya qoşulub, -Csoft-float seçimi silinib və minimum xarici LLVM versiyası 21-ə qaldırılıb. AVR üçün, C ikiqatları bu hədəflərdə standart olaraq 32 bit olduğundan, c_double növü f32 olaraq dəyişdirilib.

Mənbə: linux.org.ru

DDoS mühafizəsi, VPS VDS serverləri olan saytlar üçün etibarlı hostinq alın 🔥 DDoS qorunması, VPS VDS serverləri ilə etibarlı veb sayt hostinqi alın | ProHoster