Bản phát hành ngôn ngữ lập trình Rust 1.58

Việc phát hành ngôn ngữ lập trình đa năng Rust 1.58, do dự án Mozilla thành lập, nhưng hiện được phát triển dưới sự bảo trợ của tổ chức phi lợi nhuận độc lập Rust Foundation, đã được xuất bản. Ngôn ngữ tập trung vào an toàn bộ nhớ, cung cấp khả năng quản lý bộ nhớ tự động và cung cấp phương tiện để đạt được tính song song cao mà không cần sử dụng trình thu gom rác hoặc thời gian chạy (thời gian chạy được giảm xuống mức khởi tạo và bảo trì cơ bản của thư viện tiêu chuẩn).

Quản lý bộ nhớ tự động của Rust giúp nhà phát triển tránh khỏi các lỗi khi thao tác với con trỏ và bảo vệ chống lại các sự cố phát sinh do thao tác bộ nhớ ở mức độ thấp, chẳng hạn như truy cập vùng bộ nhớ sau khi nó được giải phóng, hủy bỏ tham chiếu con trỏ null, tràn bộ đệm, v.v. Để phân phối các thư viện, cung cấp các bản dựng và quản lý các phụ thuộc, dự án phát triển trình quản lý gói Hàng hóa. Kho lưu trữ crates.io được hỗ trợ để lưu trữ thư viện.

Những đổi mới chính:

  • Trong các khối định dạng chuỗi, ngoài khả năng sẵn có trước đây để thay thế các biến được liệt kê rõ ràng sau một chuỗi theo số và tên, khả năng thay thế các mã định danh tùy ý bằng cách thêm biểu thức “{identifier}” vào chuỗi cũng được triển khai. Ví dụ: // Các cấu trúc được hỗ trợ trước đây: println!("Xin chào, {}!", get_person()); println!("Xin chào, {0}!", get_person()); println!("Xin chào, {person}!", Person = get_person()); // bây giờ bạn có thể chỉ định let people = get_person(); println!("Xin chào, {person}!");

    Mã định danh cũng có thể được chỉ định trực tiếp trong các tùy chọn định dạng. let (chiều rộng, độ chính xác) = get_format(); for (tên, điểm) trong get_scores() { println!("{name}: {score:width$.precision$}"); }

    Sự thay thế mới hoạt động trong tất cả các macro hỗ trợ định nghĩa định dạng chuỗi, ngoại trừ macro “hoảng loạn!”. trong phiên bản 2015 và 2018 của ngôn ngữ Rust, trong đó Panic!("{ident}") được coi như một chuỗi thông thường (trong Rust 2021 tính năng thay thế hoạt động).

  • Hành vi của cấu trúc std::process::Command trên nền tảng Windows đã được thay đổi để khi thực thi lệnh, vì lý do bảo mật, nó không còn tìm kiếm các tệp thực thi trong thư mục hiện tại nữa. Thư mục hiện tại bị loại trừ vì nó có thể được sử dụng để thực thi mã độc nếu các chương trình chạy trong thư mục không đáng tin cậy (CVE-2021-3013). Logic phát hiện thực thi mới liên quan đến việc tìm kiếm các thư mục Rust, thư mục ứng dụng, thư mục hệ thống Windows và các thư mục được chỉ định trong biến môi trường PATH.
  • Thư viện chuẩn đã mở rộng số lượng hàm được đánh dấu "#[must_use]" để đưa ra cảnh báo nếu giá trị trả về bị bỏ qua, giúp xác định lỗi gây ra do giả định một hàm sẽ thay đổi giá trị thay vì trả về giá trị mới.
  • Một phần mới của API đã được chuyển sang danh mục ổn định, bao gồm các phương pháp và cách triển khai các đặc điểm đã được ổn định:
    • Siêu dữ liệu::is_symlink
    • Đường dẫn::is_symlink
    • {số nguyên}::saturating_div
    • Tùy chọn::unwrap_unchecked
    • Kết quả::unwrap_unchecked
    • Kết quả::unwrap_err_unchecked
  • Thuộc tính "const", xác định khả năng sử dụng nó trong bất kỳ ngữ cảnh nào thay vì hằng số, được sử dụng trong các hàm:
    • Thời lượng::mới
    • Thời lượng::checked_add
    • Thời lượng::saturating_add
    • Thời lượng::checked_sub
    • Thời lượng::saturating_sub
    • Thời lượng::checked_mul
    • Thời lượng::saturating_mul
    • Thời lượng::checked_div
  • Cho phép hủy tham chiếu con trỏ "*const T" trong ngữ cảnh "const".
  • Trong trình quản lý gói Hàng hóa, trường Rust_version đã được thêm vào siêu dữ liệu gói và tùy chọn “--message-format” đã được thêm vào lệnh “cài đặt hàng hóa”.
  • Trình biên dịch triển khai hỗ trợ cho cơ chế bảo vệ CFI (Tính toàn vẹn của luồng điều khiển), cơ chế này bổ sung các kiểm tra trước mỗi lệnh gọi gián tiếp để phát hiện một số dạng hành vi không xác định có khả năng dẫn đến vi phạm thứ tự thực hiện thông thường (luồng điều khiển) do lệnh gọi gián tiếp. sử dụng các khai thác làm thay đổi con trỏ được lưu trong bộ nhớ trên các hàm.
  • Trình biên dịch đã bổ sung hỗ trợ cho phiên bản 5 và 6 của định dạng so sánh mức độ bao phủ LLVM, được sử dụng để đánh giá mức độ bao phủ mã trong quá trình thử nghiệm.
  • Trong trình biên dịch, các yêu cầu đối với phiên bản tối thiểu của LLVM được nâng lên LLVM 12.
  • Mức hỗ trợ thứ ba cho nền tảng x86_64-unknown-none đã được triển khai. Cấp độ thứ ba bao gồm hỗ trợ cơ bản nhưng không có thử nghiệm tự động, xuất bản các bản dựng chính thức hoặc kiểm tra xem mã có thể được xây dựng hay không.

Ngoài ra, chúng ta có thể lưu ý rằng Microsoft đã phát hành thư viện Rust cho Windows 0.30, cho phép bạn sử dụng ngôn ngữ Rust để phát triển ứng dụng cho HĐH Windows. Bộ này bao gồm hai gói thùng (windows và windows-sys), qua đó bạn có thể truy cập Win API trong các chương trình Rust. Mã hỗ trợ API được tạo động từ siêu dữ liệu mô tả API, cho phép bạn triển khai hỗ trợ không chỉ cho các lệnh gọi API Win hiện có mà còn cho các lệnh gọi sẽ xuất hiện trong tương lai. Phiên bản mới bổ sung hỗ trợ cho nền tảng đích UWP (Nền tảng Windows phổ quát) và triển khai các loại Xử lý và Gỡ lỗi.

Nguồn: opennet.ru

Thêm một lời nhận xét