Vừa qua, các nhà sáng lập của Rust đã phát hành phiên bản mới nhất của Rust version 1.65.0. Ngôn ngữ này phát hành lần đầu tiên vào năm 2010 và được thiết kế để dễ dàng phát triển phần mềm cấp hệ thống nhanh chóng và an toàn hơn. Sau đây là những điểm mới mẻ của phiên bản này mà bạn nên biết.
Cách cài đặt:
Nếu bạn đã cài đặt phiên bản trước của Rust, bạn có thể truy cập phiên bản mới nhất thông qua lệnh sau:
$ rustup update stable
Nếu bạn chưa từng cài đặt, bạn có thể tải cài đặt phiên bản mới nhất này tại trang web của Rust và xem ghi chú phát hành chi tiết cho 1.65.0 trên GitHub.
Các tính năng mới của Rust phiên bản 1.65.0
1. Các kiểu dữ liệu liên kết chung (GATs)
Giờ đây, các chỉ số chung về lifetime, loại và hằng số có thể được xác định trên các loại được liên kết, như sau:
Sau đây là một vài đặc điểm ví dụ, để hiểu thêm về chức năng của chúng:
Như bạn có thể thấy, GATs khá linh hoạt khi cho phép hiển thị một số mẫu hiện ra khi mà trước đó ta không thể viết ra được. Để biết thêm thông tin, bạn có thể tham khảo thêm bài viết “The push for GATs stabilization” được Rust phát hành vào năm ngoài và Generic associated types to be stable in Rust 1.65 được ra mắt vào tháng trước.
2. Câu điều kiện let
-else
Một loại câu lệnh mới let
được giới thiệu, let
-else
với một mẫu có thể bác bỏ và một khối phân nhánh else
sẽ thực thi khi mẫu đó không khớp.
Câu lệnh let
thông thường chỉ có thể sử dụng các mẫu không thể bác bỏ, được biết là luôn khớp. Mẫu đó thường chỉ là một liên kết biến đơn lẻ, nhưng cũng có thể giải nén các kiểu phức hợp như cấu trúc, bộ giá trị và mảng. Tuy nhiên, điều này không thể sử dụng được cho các khớp có điều kiện, chẳng hạn như rút ra một biến thể của enum - until now! Với let
-else
, một mẫu có thể bác bỏ, có thể khớp và ràng buộc các biến trong phạm vi xung quanh giống như let
thông thường, hoặc phân nhánh khác (ví dụ: break
, return
, panic!
) khi mẫu không khớp.
3. Break
từ các labeled blocks
Các biểu thức block thuần túy bây giờ có thể được gắn nhãn như một mục tiêu break
, nhằm kết thúc block đó sớm. Điều này nghe có vẻ giống một câu lệnh goto
, nhưng nó không phải là một bước nhảy tùy ý, câu lệnh này chỉ hoạt động từ bên trong một block cho đến phần cuối của nó. Điều này hoàn hoàn thực hiện được với các "loop" block, và có thể bạn đã từng chứng kiến vài người viết các vòng lặp luôn thực thi một lần, chỉ để nhận được một dấu ngắt có gắn nhãn.
Bây giờ có một tính năng ngôn ngữ dành riêng cho điều đó! break
được gắn nhãn cũng có thể bao gồm một giá trị biểu thức, giống như với các vòng lặp, cho phép một block nhiều câu lệnh có giá trị “return" sớm.
4. API đã được ổn định
Các method và trait implementations sau đây hiện đã ổn định:
std::backtrace::Backtrace
Bound::as_ref
std::io::read_to_string
<*const T>::cast_mut
<*mut T>::cast_const
5. Các thay đổi khác:
Có những thay đổi khác trong phiên bản mới nhất này, bao gồm:
- Nội tuyến MIR hiện đã được kích hoạt cho các biên dịch được tối ưu hóa. Điều này giúp cải thiện 3-10% thời gian biên dịch cho các real world cartes.
- Khi lên lịch công việc, Cargo hiện đã có thể sắp xếp hàng đợi các công việc đang chờ xử lý để cải thiện hiệu suất.
- Để cải thiện quá trình biên dịch, hỗ trợ chia nhỏ thông tin gỡ lỗi hiện đã ổn định, cho phép người dùng có thể sử dụng trên Linux, sau khi được hỗ trợ trên macOS kể từ phiên bản Rust 1.51. Với khả năng này,
-Csplit-debuginfo=unpacked
sẽ chia debuginfo thành nhiều tệp đối tượng.dwo DWARF
, trong khi-Csplit-debuginfo=packed
sẽ tạo ra một package.dwp DWARF
cùng với một tệp nhị phân đầu ra với tất cả debuginfo được package cùng nhau.