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:

code

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:

code rust

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.

code rust 1.65.0

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.

code rust 1.65.0

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.

code rust 1.65.0

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.

VietnamWorks inTECH