Karat 1.96.0

Siaran pers telah diterbitkan. Karat 1.96.0 — Versi stabil terbaru dari bahasa pemrograman Rust. Pembaruan telah dirilis. 28 Mei tahun 2026; dapat diinstal menggunakan perintah rustup update stable standar. Perubahan utama meliputi tipe rentang baru di core::range, stabilisasi makro pencocokan pola, pengetatan perilaku build WebAssembly, dan perbaikan untuk dua kerentanan di Cargo.

Perubahan besar

  • Tipe rentang baru core::range::Range*.
    Tipe rentang baru telah distabilkan dalam pustaka standar: core::range::Range, RangeFrom, RangeInclusive, dan iterator terkaitnya. Tidak seperti tipe lama dari core::ops, rentang baru ini tidak mengimplementasikan Iterator secara langsung, tetapi dikonversi menjadi iterator melalui IntoIterator. Hal ini memungkinkan rentang ini menjadi Copyable, yang sangat berguna, misalnya, saat menyimpan rentang sebagai bidang struktur. Sintaks seperti 0..1 saat ini membuat tipe rentang lama, tetapi direncanakan untuk dimigrasikan ke tipe baru dalam versi bahasa mendatang.

  • Menambahkan assert_matches! dan debug_assert_matches!.
    Makro baru memungkinkan Anda untuk memeriksa apakah suatu nilai cocok dengan pola yang diberikan. Konsepnya mirip dengan assert!(matches!(…)), tetapi jika terjadi kesalahan, representasi debug dari nilai tersebut akan dicetak, sehingga menyederhanakan diagnostik. Makro ini tidak ditambahkan ke Prelude untuk menghindari konflik dengan crate pihak ketiga yang populer, jadi makro ini harus diimpor secara eksplisit dari core atau std.

  • Mengubah perilaku target WebAssembly.
    Rust tidak lagi meneruskan --allow-undefined ke linker untuk build WebAssembly. Simbol yang tidak terdefinisi sekarang diperlakukan sebagai kesalahan selama proses linking, alih-alih secara otomatis dikonversi menjadi impor dari modul "env". Ini seharusnya dapat mendeteksi kesalahan build dan nama simbol yang tidak valid lebih awal. Perilaku lama dapat dikembalikan, jika diperlukan, menggunakan RUSTFLAGS=-Clink-arg=--allow-undefined atau dengan secara eksplisit menentukan modul wasm yang diimpor menggunakan #[link(wasm_import_module = "env")].

  • Cargo telah menerima perbaikan keamanan.
    Rust 1.96.0 memperbaiki dua kerentanan yang memengaruhi pengguna registri pihak ketiga. CVE-2026-5223 Berkaitan dengan penanganan symlink di dalam tarball crate: sebuah paket berbahaya dari registry pihak ketiga dapat menimpa cache paket lain dari registry yang sama. Mulai dari Rust 1.96.0, Cargo menolak arsip crate yang berisi symlink. CVE-2026-5222 Masalah ini berkaitan dengan normalisasi URL di registri sparse dan, dalam keadaan langka, dapat mengakibatkan token Cargo dikirim ke registri berbahaya. Menurut tim Rust, pengguna crates.io tidak terpengaruh oleh masalah ini.

  • Perubahan dalam bahasa.
    Rilis ini mencakup: Beberapa perbaikan dan peningkatan kecil: Memungkinkan penerusan metavariabel expr dari makro ke cfg, mengoreksi kesalahan konversi tipe dalam ekspresi tuple, memperbaiki kasus langka petunjuk inferensi tipe yang salah untuk argumen fungsi, menambahkan dukungan untuk register vektor s390x dalam perakitan sebaris, dan mengizinkan kembali konstanta ManuallyDrop sebagai templat—ini memperbaiki regresi yang diperkenalkan di Rust 1.94.0.

  • Perubahan pada kompiler dan platform.
    Untuk LinuxDukungan relaksasi tautan telah diaktifkan untuk target LoongArch—sebuah optimasi penautan yang menyederhanakan beberapa transisi dan panggilan setelah penyebaran kode. Untuk riscv64gc-unknown-fuchsia, konfigurasi dasar telah diperbarui ke profil RVA22 dengan dukungan untuk ekstensi vektor.

  • Pembaruan pustaka standar.
    Dukungan untuk iterasi pada rentang bilangan bulat NonZero telah ditambahkan. Penanganan alamat host secara malas di SGX melalui ToSocketAddr juga telah diperbaiki, dan definisi memori "dapat dibaca/ditulis" telah diperjelas dalam dokumentasi dan kontrak internal: pointer null telah dihapus dari definisi umum, dan pengecualian sekarang ditentukan secara terpisah untuk metode tertentu.

  • API yang distabilkan.
    Di antara antarmuka yang distabilkan adalah assert_matches!, debug_assert_matches!, implementasi dari From untuk AssertUnwindSafe Sel Malas dan LazyLock , serta tipe rentang dan iterator baru dari core::range, termasuk Range, RangeFrom, RangeToInclusive dan iteratornya.

  • Muatan: Perubahan pada dependensi dan dokumentasi.
    Dependensi kini dapat menentukan repositori Git dan registri alternatif: versi Git akan digunakan secara lokal, dan versi registri akan digunakan selama penerbitan, mirip dengan perilaku pada crates.io. Dukungan untuk target.'cfg(..)'.rustdocflags dalam konfigurasi Cargo juga telah ditambahkan.

  • Rustdoc kini menangani dokumentasi dengan lebih akurat.
    Catatan API yang sudah usang kini ditampilkan sebagai dokumentasi biasa, tanpa pemrosesan khusus sebelumnya melalui `white-space: pre-wrap`. Selain itu, rustdoc tidak lagi memeriksa `missing_doc_code_examples` untuk elemen di dalam `impl`, dan metode serta fungsi terkait kini dipisahkan di sidebar dokumentasi.

  • Kemungkinan ketidakcocokan.
    Rilis ini berisi beberapa perubahan yang mungkin muncul dalam kode non-standar: tata letak beberapa enum #[repr(Int)] telah diperbaiki dalam kasus ekstrem, dan beberapa konversi ukuran yang tidak berguna di Pin telah dinonaktifkan. , Proses build WebAssembly sekarang mengalami crash pada simbol yang tidak terdefinisi, atribut #![reexport_test_harness_main] yang sebelumnya distabilkan secara tidak sengaja kini kembali dibatasi aksesnya, opsi -Csoft-float telah dihapus, dan versi LLVM eksternal minimum telah ditingkatkan menjadi 21. Untuk AVR, tipe c_double telah diubah menjadi f32, karena double C secara default berukuran 32-bit pada target ini.

Sumber: linux.org.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster