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

Ngôn ngữ lập trình đa năng Rust 1.64, được thành lập bởi dự án Mozilla 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 phát hành. Ngôn ngữ tập trung vào sự an toàn của bộ nhớ và cung cấp phương tiện để đạt được tính song song công việc cao trong khi tránh sử dụng trình thu gom rác và thời gian chạy (thời gian chạy được giảm xuống để khởi tạo và bảo trì cơ bản của thư viện chuẩn).

Các phương pháp xử lý bộ nhớ của Rust cứu nhà phát triển 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 xử lý 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.

An toàn bộ nhớ được cung cấp trong Rust tại thời điểm biên dịch thông qua kiểm tra tham chiếu, theo dõi quyền sở hữu đối tượng, theo dõi thời gian tồn tại của đối tượng (phạm vi) và đánh giá tính chính xác của quyền truy cập bộ nhớ trong quá trình thực thi mã. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo bắt buộc các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, áp dụng khái niệm tham chiếu và biến bất biến theo mặc định, cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

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

  • Các yêu cầu đối với môi trường Linux trong trình biên dịch, trình quản lý gói Cargo và thư viện chuẩn libstd đã được tăng lên - các yêu cầu tối thiểu đối với Glibc đã được nâng lên từ phiên bản 2.11 lên 2.17 và nhân Linux từ phiên bản 2.6.32 lên 3.2. Các hạn chế cũng áp dụng cho các tệp thực thi ứng dụng Rust được xây dựng bằng libstd. Bộ công cụ phân phối RHEL 7, SLES 12-SP5, Debian 8 và Ubuntu 14.04 đáp ứng các yêu cầu mới. Hỗ trợ cho RHEL 6, SLES 11-SP4, Debian 7 và Ubuntu 12.04 sẽ bị ngừng. Người dùng sử dụng các tệp thực thi do Rust xây dựng trong môi trường có nhân Linux cũ hơn được khuyến khích nâng cấp hệ thống của họ, duy trì các bản phát hành cũ hơn của trình biên dịch hoặc duy trì nhánh libstd của riêng họ với các lớp để duy trì khả năng tương thích.

    Trong số các lý do chấm dứt hỗ trợ cho các hệ thống Linux cũ hơn là do nguồn lực hạn chế để tiếp tục duy trì khả năng tương thích với các môi trường cũ hơn. Hỗ trợ cho Glibc cũ yêu cầu sử dụng các công cụ cũ khi kiểm tra trong hệ thống tích hợp liên tục, trước yêu cầu phiên bản ngày càng tăng trong LLVM và các tiện ích biên dịch chéo. Yêu cầu phiên bản kernel tăng lên là do khả năng sử dụng các lệnh gọi hệ thống mới trong libstd mà không cần duy trì các lớp để đảm bảo khả năng tương thích với các kernel cũ hơn.

  • Đặc điểm IntoFuture đã được ổn định, giống với IntoIterator, nhưng khác với IntoIterator ở chỗ sử dụng vòng lặp “.await” thay vì “for ... in ...”. Khi kết hợp với IntoFuture, từ khóa ".await" không chỉ có thể mong đợi đặc điểm Tương lai mà còn bất kỳ loại nào khác có thể được chuyển đổi thành Tương lai.
  • Tiện ích máy phân tích rỉ sét được bao gồm trong bộ sưu tập các tiện ích được cung cấp trong các bản phát hành Rust. Tiện ích này cũng có sẵn để cài đặt bằng cách sử dụng Rustup (thành phần Rustup thêm bộ phân tích rỉ sét).
  • Trình quản lý gói Hàng hóa bao gồm tính kế thừa không gian làm việc để loại bỏ sự trùng lặp các giá trị trường chung giữa các gói, chẳng hạn như phiên bản Rust và URL kho lưu trữ. Đồng thời bổ sung hỗ trợ xây dựng cho nhiều nền tảng mục tiêu cùng một lúc (giờ đây bạn có thể chỉ định nhiều tham số trong tùy chọn “--target”).
  • 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:
    • tương lai::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Các loại tương thích với C, trước đây đã được ổn định trong mô-đun std::ffi, đã được thêm vào lõi và thư viện alloc:
    • lõi::ffi::CStr
    • lõi::ffi::FromBytesWithNulError
    • phân bổ::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • phân bổ::ffi::IntoStringError
    • phân bổ::ffi::NulError
  • Các loại C được ổn định trước đó trong mô-đun std::os::raw đã được thêm vào các mô-đun core::ffi và std::ffi (ví dụ: loại c_uint và c_ulong đã được đề xuất cho loại uint và ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Trình xử lý cấp thấp đã được ổn định để sử dụng với cơ chế Thăm dò ý kiến ​​(trong tương lai, nó được lên kế hoạch cung cấp API đơn giản hóa không yêu cầu sử dụng các cấu trúc cấp thấp như Kéo và Ghim):

    • tương lai::poll_fn
    • nhiệm vụ::sẵn sàng!
  • 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 hàm slice::from_raw_parts.
  • Để lưu trữ dữ liệu gọn gàng hơn, bố cục bộ nhớ của các cấu trúc Ipv4Addr, Ipv6Addr, SocketAddrV4 và SocketAddrV6 đã được thay đổi. Có thể có sự cố tương thích với các gói thùng đơn sử dụng std::mem::transmute để thao tác cấu trúc ở mức độ thấp.
  • Việc xây dựng trình biên dịch Rust cho nền tảng Windows sử dụng tối ưu hóa PGO (tối ưu hóa theo hướng dẫn cấu hình), giúp tăng hiệu suất biên dịch mã lên 10-20%.
  • Trình biên dịch đã triển khai cảnh báo mới về các trường không được sử dụng trong một số cấu trúc nhất định.

Ngoài ra, bạn có thể lưu ý báo cáo trạng thái về việc phát triển một triển khai thay thế của trình biên dịch ngôn ngữ Rust, do dự án gccrs (GCC Rust) chuẩn bị và được phê duyệt để đưa vào GCC. Sau khi tích hợp giao diện người dùng, các công cụ GCC tiêu chuẩn có thể được sử dụng để biên dịch các chương trình bằng ngôn ngữ Rust mà không cần cài đặt trình biên dịch Rustc, được xây dựng bằng cách sử dụng các phát triển LLVM. Miễn là quá trình phát triển đi đúng hướng và tránh mọi vấn đề không lường trước được, giao diện Rust sẽ được tích hợp vào bản phát hành GCC 13 dự kiến ​​vào tháng 13 năm sau. Việc triển khai GCC XNUMX của Rust sẽ ở trạng thái beta, chưa được bật theo mặc định.

Nguồn: opennet.ru

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