Thông cáo báo chí đã được công bố. Rỉ 1.96.0 — Phiên bản ổn định mới nhất của ngôn ngữ lập trình Rust. Bản cập nhật đã được phát hành. 28 May 2026 nămNó có thể được cài đặt bằng lệnh rustup update stable tiêu chuẩn. Những thay đổi chính bao gồm các kiểu phạm vi mới trong core::range, ổn định các macro khớp mẫu, thắt chặt hành vi xây dựng WebAssembly và sửa hai lỗ hổng trong Cargo.
Sự thay đổi chính
Các kiểu phạm vi mới core::range::Range*.
Các kiểu phạm vi mới đã được ổn định trong thư viện chuẩn: core::range::Range, RangeFrom, RangeInclusive và các iterator liên quan của chúng. Không giống như các kiểu cũ từ core::ops, các phạm vi mới không trực tiếp triển khai Iterator, mà được chuyển đổi thành iterator thông qua IntoIterator. Điều này cho phép các phạm vi này có thể sao chép được (Copyable), rất tiện lợi, ví dụ, khi lưu trữ một phạm vi dưới dạng trường cấu trúc. Cú pháp như 0..1 hiện đang tạo ra các kiểu phạm vi cũ, nhưng dự kiến sẽ được chuyển đổi sang các kiểu mới trong phiên bản ngôn ngữ tương lai.Đã thêm assert_matches! và debug_assert_matches!.
Các macro mới cho phép bạn kiểm tra xem một giá trị có khớp với một mẫu nhất định hay không. Khái niệm này tương tự như assert!(matches!(…)), nhưng trong trường hợp xảy ra lỗi, một biểu diễn gỡ lỗi của giá trị sẽ được in ra, giúp đơn giản hóa việc chẩn đoán. Các macro này không được thêm vào Prelude để tránh xung đột với các crate bên thứ ba phổ biến, vì vậy chúng phải được nhập rõ ràng từ core hoặc std.Đã thay đổi hành vi của các mục tiêu WebAssembly.
Rust không còn truyền tham số --allow-undefined cho trình liên kết khi biên dịch WebAssembly nữa. Các ký hiệu không xác định giờ đây được coi là lỗi trong quá trình liên kết, thay vì tự động được chuyển đổi thành các import từ module "env". Điều này sẽ giúp phát hiện lỗi biên dịch và tên ký hiệu không hợp lệ sớm hơn. Có thể khôi phục lại hành vi cũ nếu cần bằng cách sử dụng RUSTFLAGS=-Clink-arg=--allow-undefined hoặc bằng cách chỉ định rõ module wasm được import bằng cách sử dụng #[link(wasm_import_module = "env")].Cargo đã nhận được các bản vá lỗi bảo mật.
Những thay đổi về ngôn ngữ.
Bản phát hành này bao gồm: Một số bản sửa lỗi và cải tiến nhỏ: Cho phép truyền các biến siêu dữ liệu expr của macro cho cfg, sửa lỗi ép kiểu không bao giờ xảy ra trong các biểu thức tuple, khắc phục các trường hợp hiếm gặp về gợi ý suy luận kiểu không chính xác cho các đối số hàm, thêm hỗ trợ cho các thanh ghi vectơ s390x trong mã lắp ráp nội tuyến và cho phép lại việc sử dụng ManuallyDrop làm mẫu — điều này khắc phục lỗi hồi quy được đưa vào trong Rust 1.94.0.Những thay đổi về trình biên dịch và nền tảng.
vì LinuxTính năng hỗ trợ nới lỏng liên kết đã được kích hoạt cho các mục tiêu LoongArch — một tối ưu hóa liên kết giúp đơn giản hóa một số chuyển đổi và lệnh gọi sau khi triển khai mã. Đối với riscv64gc-unknown-fuchsia, cấu hình cơ bản đã được cập nhật lên cấu hình RVA22 với hỗ trợ cho các phần mở rộng vectơ.Cập nhật thư viện tiêu chuẩn.
Đã thêm hỗ trợ cho việc lặp qua các phạm vi số nguyên khác 0. Việc xử lý lười biếng các địa chỉ máy chủ trong SGX thông qua ToSocketAddr cũng đã được sửa lỗi, và định nghĩa về bộ nhớ "có thể đọc/ghi" đã được làm rõ trong tài liệu và các hợp đồng nội bộ: con trỏ null đã được loại bỏ khỏi định nghĩa chung, và các ngoại lệ hiện được chỉ định riêng cho các phương thức cụ thể.API ổn định.
Trong số các giao diện đã được ổn định có assert_matches!, debug_assert_matches!, các triển khai của From cho AssertUnwindSafe , LazyCell và LazyLock Cũng như các kiểu phạm vi và trình lặp mới từ core::range, bao gồm Range, RangeFrom, RangeToInclusive và các trình lặp của chúng.Cargo: Thay đổi về các thư viện phụ thuộc và tài liệu.
Giờ đây, một dependency có thể chỉ định cả kho lưu trữ Git và một registry thay thế: phiên bản Git sẽ được sử dụng cục bộ, và phiên bản registry sẽ được sử dụng trong quá trình xuất bản, tương tự như hành vi của crates.io. Hỗ trợ cho target.'cfg(..)'.rustdocflags trong cấu hình Cargo cũng đã được thêm vào.Rustdoc hiện xử lý tài liệu chính xác hơn.
Các ghi chú API lỗi thời giờ đây được hiển thị dưới dạng tài liệu thông thường, không còn cần xử lý đặc biệt bằng thuộc tính `pre-wrap` như trước nữa. Ngoài ra, rustdoc không còn kiểm tra cú pháp các phần tử `missing_doc_code_examples` bên trong `impl`, và các phương thức cùng các hàm liên quan giờ đây được tách biệt trong thanh bên tài liệu.Các khả năng không tương thích.
Bản phát hành này chứa một số thay đổi có thể xuất hiện trong mã không chuẩn: bố cục của một số kiểu liệt kê #[repr(Int)] đã được sửa trong các trường hợp cực đoan, và một số kiểu ép kiểu unsize không cần thiết trong Pin đã bị vô hiệu hóa. Các bản dựng WebAssembly hiện bị lỗi khi gặp các ký hiệu không xác định, thuộc tính #![reexport_test_harness_main] được ổn định một cách ngẫu nhiên đã được đưa trở lại trạng thái tính năng bị hạn chế, tùy chọn -Csoft-float đã bị loại bỏ và phiên bản LLVM bên ngoài tối thiểu đã được tăng lên 21. Đối với AVR, kiểu c_double đã được thay đổi thành f32, vì kiểu C double mặc định là 32 bit trên các mục tiêu này.
Nguồn: linux.org.ru
