- Bản phát hành stable Rust 1.97.0 thay đổi cách tạo symbol trong sản phẩm biên dịch và luồng xử lý cảnh báo khi build; có thể cập nhật bằng
rustup update stable
- symbol mangling v0 trở thành mặc định stable, chuyển sang hệ thống tên symbol riêng cho Rust, trong khi cách cũ dựa trên Itanium ABI đang đi theo hướng bị loại bỏ
- Cargo dùng
CARGO_BUILD_WARNINGS thay cho RUSTFLAGS=-Dwarnings để kiểm soát cảnh báo ở các mức allow, warn, deny, giúp dễ tách chính sách build giữa CI và môi trường local
- rustc hiển thị output của linker dưới dạng cảnh báo
linker_messages ngay cả khi link thành công; lint này hiện không chịu ảnh hưởng của lint group warnings
- Thư viện chuẩn bao gồm việc ổn định
Default cho RepeatN, Send cho std::fs::File trên UEFI, các phương thức bit cho số nguyên và NonZero, cùng char::is_control trong const context
Cập nhật Rust 1.97.0
- Rust 1.97.0 là một bản phát hành stable; người dùng đã cài Rust bằng
rustup có thể cập nhật bằng lệnh sau
rustup update stable
- Nếu chưa có
rustup, có thể tải từ trang cài đặt rustup trên website Rust
- Các thay đổi chi tiết được tổng hợp trong detailed release notes for 1.97.0
- Nếu muốn tham gia kiểm thử các bản phát hành trong tương lai, có thể dùng kênh beta/nightly bằng
rustup default beta hoặc rustup default nightly, và báo cáo lỗi phát hiện được trên Rust issue tracker
Các thay đổi về hành vi biên dịch và build trên stable
-
Bật mặc định symbol mangling v0
- Khi Rust được biên dịch thành object file hoặc binary, mỗi mục như function, static... phải có một symbol duy nhất trên phạm vi toàn cục
- Để tránh xung đột khi link nhiều chương trình Rust khác nhau với nhau, Rust mangling tên bằng cách đưa các ngữ cảnh như module path, crate định nghĩa và generic vào tên mục gốc
- Cơ chế mangling cũ dựa trên Itanium ABI, vốn cũng được dùng trong một số trường hợp với C++
- Cách mới giữ lại giá trị khởi tạo của tham số generic và giảm vấn đề vẫn cần demangling tùy chỉnh do sự không nhất quán khi chỉ dùng một phần Itanium ABI
- Từ Rust 1.59, có thể chọn cơ chế mangling riêng cho Rust bằng
-Csymbol-mangling-version=v0, và từ tháng 11/2025 cơ chế này đã được áp dụng làm mặc định trên nightly
- Trong Rust 1.97, cơ chế này trở thành mặc định của stable Rust, còn legacy mangling chỉ có thể bật trên nightly
- Kế hoạch hiện tại là loại bỏ hoàn toàn legacy mangling
- Có thể xem thêm chi tiết trong bài viết trước đó switching to v0 mangling on nightly
-
Kiểm soát cảnh báo trong Cargo
- Việc coi cảnh báo là lỗi build trong CI là một thông lệ phổ biến, và trước đây thường dùng
RUSTFLAGS=-Dwarnings
- Từ Rust 1.97, Cargo trực tiếp kiểm soát mối quan hệ giữa cảnh báo và việc build thành công
allow: ẩn cảnh báo
warn: giá trị mặc định, hiển thị cảnh báo nhưng không làm thất bại build
deny: từ chối cảnh báo và coi là build thất bại
- Vì hành vi của tính năng này được quyết định bằng cấu hình Cargo, nên không làm mất hiệu lực cache build mặc định
- Nếu muốn tạm thời giảm nhiễu cảnh báo trong lúc sửa lỗi sau khi refactor, có thể chạy như sau
CARGO_BUILD_WARNINGS=allow cargo check
- Trên CI, có thể đặt
CARGO_BUILD_WARNINGS=deny để từ chối cảnh báo
- Khi dùng cùng
--keep-going, có thể thu thập tất cả lỗi và cảnh báo mà không dừng lại ở package thất bại đầu tiên
- Cấu hình chi tiết có trong
build.warnings documentation của Cargo
-
Hiển thị mặc định output của linker
- rustc gọi linker thay cho người dùng, và trước đây nếu link thành công thì mặc định ẩn output của linker
- Từ Rust 1.97, linker message được hiển thị mặc định và được xuất dưới dạng warning lint như sau
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- rustc lọc các linker message phổ biến đã được chẩn đoán là false positive hoặc hành vi có chủ đích
- Sau khi không còn ẩn output này trên nightly, nhiều lỗi đã được sửa
- Hiện
linker_messages là một lint đặc biệt và không chịu ảnh hưởng của lint group warnings
- Thông thường rustc không thể kiểm soát output của linker một cách chính xác, và output có thể chỉ xuất hiện trên một số platform
- Nếu có vẻ là output false positive của linker, có thể gửi issue
- Để ẩn cảnh báo, có thể đặt lint level thành
allow, và thêm lints section sau vào Cargo.toml
[lints.rust]
linker_messages = "allow"
API đã được ổn định
- Trong Rust 1.97, các API sau được ổn định ở mức stable
char::is_control, vốn đã stable trước đó, nay cũng stable trong const context
Changelog liên quan
- Có thể xem toàn bộ thay đổi trong changelog tương ứng của Rust, Cargo và Clippy
1 bình luận
Các ý kiến trên Lobste.rs
Việc trong Rust 1.97, Cargo có thể kiểm soát mối quan hệ giữa cảnh báo và việc build có thành công hay không là một tính năng mới rất hay
Nếu cảnh báo gây vướng trong lúc sửa lỗi sau khi refactor, có thể tạm ẩn bằng
CARGO_BUILD_WARNINGS=allow cargo check; còn trong CI thì có thể dùngCARGO_BUILD_WARNINGS=denyđể coi cảnh báo là thất bại. Khi dùng cùng--keep-going, nó sẽ không dừng ở package đầu tiên thất bại mà có thể thu thập tất cả lỗi và cảnh báoCó lẽ nên tạm hoãn nâng cấp một thời gian. Có vẻ có lỗi biên dịch sai
https://github.com/rust-lang/rust/issues/159035
https://github.com/llvm/llvm-project/pull/208683
Tuyệt. Không biết có ai có thể tóm tắt tiến độ triển khai pattern types ở đây không
Đáng tiếc là never type lần này vẫn chưa được ổn định hóa. Mong chờ bản phát hành tiếp theo