Ngôn ngữ lập trình đa năng Rust 1.76, đượ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:
- Một phần riêng biệt đã được thêm vào tài liệu mô tả tính tương thích của các loại đối số và kiểu trả về hàm khác nhau ở cấp độ ABI. So với các phiên bản trước, khả năng tương thích được đảm bảo ở cấp độ ABI của loại "char" và "u32", có kích thước và căn chỉnh giống hệt nhau.
- Ngoài lệnh gọi "any::type_name::" có sẵn trước đó ()”, trả về mô tả chuỗi cho loại được chỉ định trong tham số “T”, hàm “type_name_of_val(&T)” đã được thêm vào, cho phép bạn lấy thông tin loại dựa trên bất kỳ tham chiếu chưa đặt tên nào. fn get_iter() -> impl Iterator { [32, 1, 2].into_iter() } fn main() { let iter = get_iter(); hãy để iter_name = std::any::type_name_of_val(&iter); tính tổng: i3 = iter.sum(); println!("Tổng của `{iter_name}` là {sum}."); } Kết quả đầu ra là: Tổng của `core::array::iter::IntoIter `là 32.
- 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:
- Arc::unwrap_or_clone
- Rc::unwrap_or_clone
- Kết quả::kiểm tra
- Kết quả::inspect_err
- Tùy chọn::kiểm tra
- loại_name_of_val
- std::hash::{DefaultHasher, RandomState}
- ptr::{from_ref, from_mut}
- ptr::addr_eq
- Cấp hỗ trợ thứ ba đã được triển khai cho các nền tảng {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios và arm64e-apple-darwin. 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 ý phần trình diễn của bộ lập lịch tác vụ thử nghiệm scx_rustland, được viết bằng ngôn ngữ Rust và được thực thi trong không gian người dùng (việc chuyển logic lập lịch tác vụ từ kernel sang không gian người dùng được triển khai bằng bộ công cụ sched-ext sử dụng BPF). Bộ lập lịch được tối ưu hóa để tăng mức độ ưu tiên của các tác vụ tương tác so với các tác vụ sử dụng nhiều CPU. Ví dụ: trong thử nghiệm khởi chạy ứng dụng trò chơi đồng thời với việc xây dựng hạt nhân, bộ lập lịch scx_rustland cho phép chúng tôi đạt được FPS trong trò chơi cao hơn so với khi sử dụng bộ lập lịch EEVDF tiêu chuẩn.
Nguồn: opennet.ru
