Rust 1.96.0

Burax edildi Rust 1.96.0 Rust proqramlaşdırma dilinin növbəti sabit versiyası buraxıldı. 28 May 2026; onu standart komandası olan rustup update stable ilə qura bilərsiniz. Əsas dəyişikliklər arasında core::range içindəki yeni aralıq tipləri, şablonlara uyğunluq üçün makroların sabitləşdirilməsi, WebAssembly toplanmalarının davranışının sərtləşdirilməsi və Cargo-da iki zəifliyin aradan qaldırılması var.

Əsas dəyişikliklər

  • core::range::Range* üçün yeni aralıq tipləri.
    Standart kitabxanada yeni aralıq variantları sabitləşdirildi: core::range::Range, RangeFrom, RangeInclusive və onlarla əlaqəli iteratorlar. Köhnə core::ops tiplərindən fərqli olaraq, yeni aralıqlar birbaşa Iterator-i implementasiya etmir, əvəzinə IntoIterator vasitəsilə iteratora çevrilir. Bu, məsələn, aralığı strukturun bir fieldu olaraq saxlamaq üçün Copy olmağı mümkün edir. Sintaksis, məsələn, 0..1 hələ köhnə aralıq tiplərini yaradır, lakin dilin gələcək redaksiyasında bunu yeni tiplərə keçirmək planlaşdırılır.

  • assert_matches! və debug_assert_matches! əlavə edildi.
    Yeni makrolar, bir dəyərin müəyyən bir şablona uyğun olub-olmadığını yoxlamağa imkan tanıyır. Məhz bu, assert!(matches!(…)) ilə oxşardır, ancaq səhv baş verdikdə dəyərin Debug təmsilçiliyi çıxarılır ki, bu da diaqnostikanı asanlaşdırır. Prelude-da makrolar əlavə edilməyib, populyar üçüncü tərəf crate-lərilə münaqişəni önləmək məqsədilə, buna görə də onları açıq şəkildə core və ya std-dən idxal etmək lazımdır.

  • WebAssembly hədəflərinin davranışı dəyişdirildi.
    Rust artıq WebAssembly toplanmaları üçün xərclənən xətasız simvollar üçün -allow-undefined-i linker-ə keçirmir. İndi, xətasız simvollar toplanma zamanı səhv hesab edilir, avtomatik olaraq "env" modulundan idxal edilmir. Bu, problemli toplanma və siyahı adlarını daha tez aşkar etməyə kömək edəcək. Köhnə davranışı RUSTFLAGS=-Clink-arg=—allow-undefined vasitəsilə qaytarmaq mümkündür, ya da idxal edilən wasm-modulunu açıq şəkildə #[link(wasm_import_module = "env")] ilə göstərmək olar.

  • Cargo təhlükəsizlik düzəlişləri aldı.
    Rust 1.96.0-da üçüncü tərəf registry-lərinin istifadəçilərinə təsir edən iki zəiflik aradan qaldırıldı. CVE-2026-5223 tar arxivlərində symlinklərin işlənməsi ilə əlaqəlidir: zərərli paket üçüncü tərəf registry-dən digər bir paketin keşi yazıla bilərdi. Rust 1.96.0-dan başlayaraq, Cargo symlink olan crate-arxivlərini rədd edir. CVE-2026-5222 azaldılmış registry-nin URL-lərinin normallaşdırılması ilə əlaqədardır və nadir hallarda Cargo tokeninin zərərli registry-ə göndərilməsinə səbəb ola bilərdi. Rust komandasına görə, crates.io istifadəçiləri bu problemlərdən təsirlənməyəcək.

  • Dildə olan dəyişikliklər.
    Buraxılışa daxil edilmişdir bir neçə nöqtəvi düzəliş və genişləndirmə: cfg-yə expr-məta dəyişənlərinin ötürülməsi icazə verildi, tuş kətanlardakı never-type çevrilməsi tənzimləndi, funksiyaların arqumentləri üçün növ çıxışını səhv göstərən nadir halları düzəldildi, inline assembly-də s390x vektor registləri üçün dəstək əlavə edildi və ManuallyDrop tipli konstantaları şablon kimi istifadə etmək yenidən icazə verildi — bu, Rust 1.94.0 versiyasında ortaya çıxan regressiyanı düzəldir.

  • Kompilyator və platformalarda dəyişikliklər.
    Linux məqsədləri üçün LoongArch-da link rahatlığına dəstək əlavə edildi — bu, kod yerləşdirildikdən sonra bəzi keçidlərin və çağırışların sadələşdirilməsinə imkan verən bağlama optimizasiyasıdır. riscv64gc-unknown-fuchsia üçün baz konfiqurasiya RVA22 profilinə vektor genişləndirmələrini dəstəkləyərək yeniləndi.

  • Standart kitabxana yeniləmələri.
    NonZero tam ədədlər üzrə aralıqlara iterasiya dəstəyi əlavə edildi. Eyni zamanda, ToSocketAddr vasitəsilə SGX-də host adreslərinin gecikdirilmiş emalı düzəldildi və sənədləşdirmə və daxili müqavilələrdə oxumaq/yazma üçün 'uyğun' olan yaddaşın tərifi dəqiqləşdirildi: sıfır göstəricisi ümumi tərifdən çıxarıldı və istisnalar xüsusi metodlar üçün ayrıca qeyd edildi.

  • Sabitləşdirilmiş API-lər.
    Sabitləşdirilmiş interfeyslər arasında — assert_matches!, debug_assert_matches!, AssertUnwindSafe<T> üçün From<T> tətbiqləri, LazyCell<T, F> və LazyLock<T, F>, həmçinin core::range-dan yeni tiplər və aralıq iterasiyaları, daxil olmaqla Range, RangeFrom, RangeToInclusive və onların iteraturları.

  • Cargo: asılılıqlar və sənədləşmə üçün dəyişikliklər.
    İndi asılılıq eyni anda Git repo və alternativ registry göstərə bilər: yerli olaraq Git versiyası istifadə ediləcək, amma yerləşdirmə zamanı registry-dən versiya istifadə olunacaq, crates.io ilə davranışa oxşar. Həmçinin, target.’cfg(..)’.rustdocflags konfiqurasiyasında əlavə dəstək əlavə olundu.

  • Rustdoc daha dəqiq sənədləmə ilə məşğuldur.
    Deprecated API-lər haqqında qeydlər indi adi sənədləşmə kimi render edilir, əvvəlki xüsusi white-space: pre-wrap emalı olmadan. Bundan əlavə, rustdoc artıq impl daxilindəki elementlər üçün missing_doc_code_examples lintini vermir, və sənədlərin yan panelində metodlar və assosiasiya edilmiş funksiyalar ayrı-ayrılıqda bölünür.

  • Mümkün uyğunsuzluqlar.
    Verzinin içində qeyri-adi kodlarda özünü göstərə biləcək bir neçə dəyişiklik var: bəzi #[repr(Int)] enum-ların dövrləri xüsusilə kənar hallarda düzəldilib, bəzi istifadə edilməyən unsize-çevirmələr Pin içində qadağan edilib, WebAssembly yığmaları qeyri-müəyyən simvollarda tamamilə uğursuz olur, təsadüfən sabitləşdirilmiş #![reexport_test_harness_main] atributu yenidən feature gate ilə bağlıdır, -Csoft-float parametri silinib və xarici LLVM-in minimal versiyası 21-ə qaldırılıb. AVR üçün c_double tipi f32 ilə dəyişdirilib, çünki bu hədəflərdə C double standart olaraq 32 bitlikdir.

Mənbə: linux.org.ru

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster