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

Ngôn ngữ lập trình đa năng Rust 1.77, đượ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:

  • Đã thêm hỗ trợ cho chữ cho chuỗi C (c"văn bản"), được lưu trữ trong bộ nhớ với ký tự kết thúc bằng null và được liên kết với loại "CStr". Dự kiến, hỗ trợ chuỗi C sẽ đơn giản hóa việc viết mã tương tác với các lớp trong các ngôn ngữ lập trình sử dụng chuỗi kết thúc bằng null và sẽ cho phép thực hiện các kiểm tra cần thiết ở giai đoạn biên dịch. const HELLO: &core::ffi::CStr = c"Xin chào thế giới!";
  • Trong các hàm được thực thi không đồng bộ được khai báo bằng biểu thức “async fn”, việc sử dụng đệ quy được cho phép, tức là. các hàm như vậy bây giờ có thể tự gọi chính nó. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Macro offset_of! đã được ổn định, cho phép bạn xác định độ lệch byte của các trường cấu trúc, bảng liệt kê, tập hợp và bộ dữ liệu, liên quan đến phần đầu của loại. Trong thực tế, macro có thể hữu ích trong các tình huống mà bạn cần làm việc ở mức bù trường trong trường hợp không có phiên bản của loại đó. Đặc biệt, chức năng offset_of là cần thiết khi phát triển các thành phần cấp thấp như trình điều khiển. sử dụng std::mem; #[repr(C)] struct FieldStruct { đầu tiên: u8, thứ hai: u16, thứ ba: u8 } khẳng định_eq!(mem::offset_of!(FieldStruct, first), 0); khẳng định_eq!(mem::offset_of!(FieldStruct, giây), 2); khẳng định_eq!(mem::offset_of!(FieldStruct, thứ ba), 4);
  • Trong trình quản lý gói Hàng hóa, trong hồ sơ phát hành, việc dọn dẹp các tệp khỏi dữ liệu gỡ lỗi được bật theo mặc định (dải = “debuginfo”), trừ khi chế độ gỡ lỗi được bật rõ ràng trong hồ sơ Hàng hóa, tức là. nếu tham số gỡ lỗi = 0.
  • Tùy chọn "-Zthir-unsafeck=on" được bật theo mặc định, cung cấp kiểm tra không an toàn cho THIR (Trình bày trung gian cấp cao được nhập).
  • Đã thêm tính năng kiểm tra tìm lỗi mã nguồn cho static_mut_refs để hiển thị cảnh báo khi sử dụng tham chiếu đến các giá trị tĩnh có thể thay đổi.
  • Khả năng sử dụng loại “Từ<&[T;” đã được triển khai. N]>" cho loại "Bò<[T]>". fn foo(dữ liệu: impl Into >) { /* … */ } fn main() { foo(&[“xin chào”, “thế giới”]); }
  • Trình biên dịch cung cấp sự liên kết của các loại i16 và u128 128 byte cho hệ thống x86.
  • 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:
    • mảng::mỗi_ref
    • mảng::mỗi_mut
    • lõi::mạng
    • f32::round_ties_even
    • f64::round_ties_even
    • ghi nhớ::offset_of!
    • lát::first_chunk
    • lát::first_chunk_mut
    • lát::split_first_chunk
    • lát::split_first_chunk_mut
    • lát::last_chunk
    • lát::last_chunk_mut
    • lát::split_last_chunk
    • lát::split_last_chunk_mut
    • lát::chunk_by
    • lát::chunk_by_mut
    • Giới hạn::bản đồ
    • Tập tin::create_new
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Cấp độ hỗ trợ thứ ba đã được triển khai cho các nền tảng aarch64-unknown-illumos, hex-unknown-none-elf, riscv32imafc-esp-espidf và riscv32im-risc0-zkvm-elf. 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.

Nguồn: opennet.ru

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