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

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

  • Trình biên dịch Rustc có hệ thống dựa trên LLVM ổn định để tạo dữ liệu phạm vi được sử dụng để đánh giá phạm vi mã trong quá trình thử nghiệm. Để bật dữ liệu phạm vi bảo hiểm trong quá trình lắp ráp, bạn phải sử dụng cờ “-Cinstrument-coverage”, ví dụ: bắt đầu quá trình lắp ráp bằng lệnh “RUSTFLAGS=”-C Instrument-coverage” Cargo build”. Sau khi chạy tệp thực thi được biên dịch theo cách này, tệp default.profraw sẽ được lưu trong thư mục hiện tại, để xử lý, bạn có thể sử dụng tiện ích llvm-profdata từ thành phần llvm-tools-preview. Sau đó, đầu ra được xử lý bởi llvm-profdata có thể được chuyển đến llvm-cov để tạo báo cáo mức độ bao phủ mã có chú thích. Thông tin về liên kết tới mã nguồn được lấy từ tệp thực thi đang được kiểm tra, bao gồm dữ liệu cần thiết về kết nối giữa bộ đếm mức độ phù hợp và mã. 1| 1|fn main() { 2| 1| println!("Xin chào thế giới!"); 3| 1|}
  • Trong trình quản lý gói hàng, tính năng hỗ trợ cho cờ “-timings” đã được ổn định, bao gồm việc tạo báo cáo chi tiết về tiến độ xây dựng và thời gian thực hiện của từng bước. Báo cáo có thể hữu ích cho việc tối ưu hóa hiệu suất của quá trình lắp ráp.
  • Trình quản lý gói hàng cung cấp cú pháp mới cho cơ chế biên dịch có điều kiện và lựa chọn các phần phụ thuộc tùy chọn, được định cấu hình trong tệp Cargo.toml bằng cách liệt kê danh sách các thuộc tính được đặt tên trong phần [tính năng] và được kích hoạt bằng cách bật các thuộc tính trong quá trình xây dựng gói bằng cách sử dụng cờ “--features”. Phiên bản mới bổ sung hỗ trợ cho các phần phụ thuộc trong các không gian tên riêng biệt và các phần phụ thuộc yếu.

    Trong trường hợp đầu tiên, có thể sử dụng các phần tử có tiền tố “dep:” bên trong phần “[features]” để liên kết rõ ràng với một phần phụ thuộc tùy chọn mà không thể hiện ngầm phần phụ thuộc này dưới dạng một tính năng. Trong trường hợp thứ hai, hỗ trợ đánh dấu bằng dấu “?” đã được thêm vào. ("tên gói?/tên tính năng") chỉ nên đưa vào các phần phụ thuộc tùy chọn nếu một số thuộc tính khác bao gồm phần phụ thuộc tùy chọn đã cho. Ví dụ: trong ví dụ bên dưới, việc bật thuộc tính serde sẽ kích hoạt phần phụ thuộc "serde", cũng như thuộc tính "serde" cho phần phụ thuộc "rgb", nhưng chỉ khi phần phụ thuộc "rgb" được bật ở nơi khác: [dependency] serde = { phiên bản = " 1.0.133", tùy chọn = true } rgb = { phiên bản = "0.8.25", tùy chọn = true } [tính năng] serde = ["dep:serde", "rgb?/serde"]

  • Hỗ trợ biên dịch tăng dần, vốn đã bị tắt trong bản phát hành trước, đã được trả lại. Lỗi trình biên dịch khiến tính năng này bị tắt đã được giải quyết.
  • Đã giải quyết một số vấn đề khi cung cấp Bộ hẹn giờ tức thì với sự đảm bảo về thời gian đơn điệu, có tính đến thời gian hệ thống sử dụng ở chế độ ngủ. Trước đây, API OS được sử dụng bất cứ khi nào có thể để vận hành bộ hẹn giờ, không tính đến các tình huống có vấn đề phá vỡ sự đơn điệu về thời gian, chẳng hạn như sự cố phần cứng, sử dụng ảo hóa hoặc lỗi trong hệ điều hành.
  • 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:
    • Cung::new_cycle
    • Rc::new_cycle
    • lát::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • Có lẽUninit::assume_init_drop
    • Có lẽUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • kích thước::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • sử dụng::abs_diff
    • Hiển thị cho io::ErrorKind
    • Từ cho Mã thoát
    • Không dành cho ! (gõ "không bao giờ")
    • _Op_Assign<$t>
    • Arch::is_aarch64_feature_Detected!
  • Cấp độ hỗ trợ thứ ba đã được triển khai cho các nền tảng mips64-openwrt-linux-musl* và armv7-unknown-linux-uclibceabi (softfloat). 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.
  • Trình biên dịch đã được chuyển sang sử dụng LLVM 14.

Ngoài ra, bạn có thể lưu ý:

  • Đã thêm hỗ trợ khởi động trình biên dịch Rustc bằng chương trình phụ trợ Rustc_codegen_gcc, cho phép bạn sử dụng thư viện libgccjit từ dự án GCC làm trình tạo mã trong Rustc, cho phép Rustc cung cấp hỗ trợ cho các kiến ​​trúc và tối ưu hóa có sẵn trong GCC. Quảng bá trình biên dịch có nghĩa là khả năng sử dụng trình tạo mã dựa trên GCC trong Rustc để xây dựng chính trình biên dịch Rustc. Về mặt thực tế, tính năng này cho phép bạn xây dựng các chương trình gỉ cho các kiến ​​trúc mà trước đây không được hỗ trợ trong Rustc.
  • Đã có bản phát hành bộ công cụ uutils coreutils 0.0.13, trong đó một gói tương tự của gói GNU Coreutils, được viết lại bằng ngôn ngữ Rust, đang được phát triển. Coreutils đi kèm với hơn một trăm tiện ích, bao gồm sắp xếp, cat, chmod, chown, chroot, cp, date, dd, echo, tên máy chủ, id, ln và ls. Mục tiêu của dự án là tạo ra một triển khai Coreutils thay thế đa nền tảng, có khả năng chạy trên các nền tảng Windows, Redox và Fuchsia, cũng như phân phối theo giấy phép MIT cho phép, thay vì giấy phép GPL copyleft.

    Phiên bản mới đã cải thiện việc triển khai nhiều tiện ích, bao gồm khả năng tương thích được cải thiện đáng kể của các tiện ích cp, dd, df, Split và tr với các đối tác của chúng từ dự án GNU. Tài liệu trực tuyến được cung cấp. Trình phân tích cú pháp vỗ tay được sử dụng để phân tích các đối số dòng lệnh, đã cải thiện kết quả đầu ra cho cờ “--help” và thêm hỗ trợ cho chữ viết tắt của các lệnh dài (ví dụ: bạn có thể chỉ định “ls -col” thay vì “ls -color) ”).

Nguồn: opennet.ru

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