Karat 1.96.0

Siaran tersebut telah diterbitkan Karat 1.96.0 — versi stabil terkini bagi bahasa pengaturcaraan Rust. Kemas kini telah dikeluarkan. 28 Mei 2026 tahun; ia boleh dipasang menggunakan arahan rustup update stabil standard. Perubahan utama termasuk jenis julat baharu dalam core::range, penstabilan makro pemadanan corak, pengetatan tingkah laku binaan WebAssembly dan pembetulan untuk dua kerentanan dalam Cargo.

Perubahan besar

  • Jenis julat baharu core::range::Range*.
    Jenis julat baharu telah distabilkan dalam pustaka standard: core::range::Range, RangeFrom, RangeInclusive dan iterator yang berkaitan dengannya. Tidak seperti jenis lama daripada core::ops, julat baharu tidak melaksanakan Iterator secara langsung, tetapi ditukar kepada iterator melalui IntoIterator. Ini membolehkan julat ini Boleh Disalin, yang mana mudah, contohnya, apabila menyimpan julat sebagai medan struktur. Sintaks seperti 0..1 kini mencipta jenis julat lama, tetapi ia dirancang untuk dipindahkan ke jenis baharu dalam versi bahasa yang akan datang.

  • Menambah assert_matches! dan debug_assert_matches!.
    Makro baharu membolehkan anda menyemak sama ada nilai sepadan dengan corak yang diberikan. Konsepnya serupa dengan assert!(matches!(…)), tetapi sekiranya berlaku ralat, perwakilan debug nilai dicetak, memudahkan diagnostik. Makro ini tidak ditambah pada Prelude untuk mengelakkan konflik dengan peti pihak ketiga yang popular, jadi ia mesti diimport secara eksplisit daripada core atau std.

  • Mengubah tingkah laku sasaran WebAssembly.
    Rust tidak lagi menghantar --allow-undefined kepada penghubung untuk binaan WebAssembly. Simbol yang tidak ditakrifkan kini dianggap sebagai ralat semasa pautan, dan bukannya ditukar secara automatik kepada import daripada modul "env". Ini sepatutnya mengesan ralat binaan dan nama simbol yang tidak sah lebih awal. Tingkah laku lama boleh dipulihkan, jika perlu, menggunakan RUSTFLAGS=-Clink-arg=--allow-undefined atau dengan menyatakan modul wasm yang diimport secara eksplisit menggunakan #[link(wasm_import_module = "env")].

  • Cargo telah menerima pembetulan keselamatan.
    Rust 1.96.0 membetulkan dua kelemahan yang menjejaskan pengguna pendaftaran pihak ketiga. CVE-2026 5223- Berkaitan dengan pengendalian pautan simbolik dalam tarbal peti: pakej berniat jahat daripada pendaftaran pihak ketiga boleh menulis ganti cache pakej lain daripada pendaftaran yang sama. Bermula dengan Rust 1.96.0, Cargo menolak arkib peti yang mengandungi pautan simbolik. CVE-2026 5222- Isu ini berkaitan dengan penormalan URL dalam pendaftaran jarang dan, dalam keadaan yang jarang berlaku, boleh mengakibatkan token Cargo dihantar ke pendaftaran berniat jahat. Menurut pasukan Rust, pengguna crates.io tidak terjejas oleh isu-isu ini.

  • Perubahan dalam bahasa.
    Siaran tersebut merangkumi: Beberapa pembetulan dan penambahbaikan kecil: Membenarkan penghantaran metavariabel expr bagi makro kepada cfg, membetulkan pemutus jenis tidak pernah dalam ekspresi tuple, membetulkan kes-kes yang jarang berlaku bagi petunjuk inferens jenis yang salah untuk argumen fungsi, menambah sokongan untuk daftar vektor s390x dalam pemasangan sebaris dan membenarkan semula pemalar ManuallyDrop sebagai templat—ini membetulkan regresi yang diperkenalkan dalam Rust 1.94.0.

  • Perubahan dalam pengkompil dan platform.
    Untuk LinuxSokongan pengenduran pautan telah diaktifkan untuk sasaran LoongArch—pengoptimuman pautan yang memudahkan beberapa peralihan dan panggilan selepas penggunaan kod. Untuk riscv64gc-unknown-fuchsia, konfigurasi asas telah dikemas kini kepada profil RVA22 dengan sokongan untuk sambungan vektor.

  • Kemas kini perpustakaan standard.
    Sokongan untuk iterasi pada julat integer Bukan Sifar telah ditambah. Pengendalian alamat hos yang malas dalam SGX melalui ToSocketAddr juga telah diperbaiki, dan definisi memori "boleh dibaca/ditulis" telah dijelaskan dalam dokumentasi dan kontrak dalaman: penunjuk nol telah dialih keluar daripada definisi umum, dan pengecualian kini ditentukan secara berasingan untuk kaedah tertentu.

  • API yang distabilkan.
    Antara antara muka yang distabilkan ialah assert_matches!, debug_assert_matches!, pelaksanaan From untuk AssertUnwindSafe , LazyCell dan LazyLock , serta jenis julat dan iterator baharu daripada core::range, termasuk Range, RangeFrom, RangeToInclusive dan iteratornya.

  • Kargo: Perubahan pada kebergantungan dan dokumentasi.
    Satu kebergantungan kini boleh menentukan kedua-dua repositori Git dan pendaftaran alternatif: versi Git akan digunakan secara setempat dan versi pendaftaran akan digunakan semasa penerbitan, serupa dengan tingkah laku dengan crates.io. Sokongan untuk target.'cfg(..)'.rustdocflags dalam konfigurasi Cargo juga telah ditambah.

  • Rustdoc kini mengendalikan dokumentasi dengan lebih tepat.
    Nota API yang tidak digunakan kini dipaparkan sebagai dokumentasi biasa, tanpa pemprosesan khas sebelumnya melalui ruang kosong: pra-pembungkusan. Selain itu, rustdoc tidak lagi memaparkan missing_doc_code_examples untuk elemen di dalam impl, dan kaedah serta fungsi yang berkaitan kini dipisahkan dalam bar sisi dokumentasi.

  • Kemungkinan ketidakserasian.
    Siaran ini mengandungi beberapa perubahan yang mungkin muncul dalam kod bukan standard: susun atur beberapa enum #[repr(Int)] telah diperbaiki dalam kes yang melampau, dan beberapa cetakan tidak bersaiz yang tidak berguna dalam Pin telah dinyahdayakan. , binaan WebAssembly kini ranap pada simbol yang tidak ditakrifkan, atribut #![reexport_test_harness_main] yang distabilkan secara tidak sengaja telah dikunci ciri sekali lagi, pilihan -Csoft-float telah dialih keluar dan versi LLVM luaran minimum telah ditingkatkan kepada 21. Untuk AVR, jenis c_double telah ditukar kepada f32, memandangkan C double adalah 32-bit secara lalai pada sasaran ini.

Sumber: linux.org.ru

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster