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

Việc phát hành ngôn ngữ lập trình hệ thống Rust 1.57, do dự án Mozilla sáng 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:

  • Việc sử dụng macro “hoảng loạn!” đã được ổn định. trong các ngữ cảnh được tạo trong quá trình biên dịch, chẳng hạn như khai báo "const fn". Ngoài ra, ngoài việc sử dụng "hoảng loạn!" Các khai báo const cho phép sử dụng macro “assert!”. và một số API thư viện tiêu chuẩn khác. Tính năng ổn định chưa bao trùm toàn bộ cơ sở hạ tầng định dạng, vì vậy ở dạng hiện tại, macro "hoảng loạn!" chỉ có thể được sử dụng với các chuỗi tĩnh (panic!(“...")) hoặc với một giá trị nội suy duy nhất "&str" khi thay thế (panic!("{}", a)), giá trị này nên được giới hạn ở việc thay thế "{ }" mà không có thông số định dạng và các loại khác. Trong tương lai, khả năng áp dụng macro trong các ngữ cảnh không đổi sẽ được mở rộng, nhưng khả năng ổn định đã đủ để thực hiện kiểm tra xác nhận ở giai đoạn biên dịch: const _: () = khẳng định!(std::mem::size_of:: () == 64); const _: () = khẳng định!(std::mem::size_of:: () == 8);
  • Trình quản lý gói Hàng hóa cho phép sử dụng hồ sơ với tên tùy ý, không giới hạn ở "dev", "release", "test" và "bench". Ví dụ: để chỉ bật tối ưu hóa ở giai đoạn liên kết (LTO) khi các cụm sản phẩm cuối cùng được tạo, bạn có thể tạo hồ sơ “sản xuất” trong Cargo.toml và thêm cờ “lto = true” vào đó. Tuy nhiên, khi xác định cấu hình của riêng mình, bạn phải chỉ định cấu hình hiện có để kế thừa các cài đặt mặc định từ cấu hình đó. Ví dụ bên dưới tạo hồ sơ “sản xuất” bổ sung cho hồ sơ “phát hành” bằng cách bao gồm cờ “lto = true”. Bản thân hồ sơ được kích hoạt bằng cách gọi hàng hóa với tùy chọn “--profile production” và các tạo phẩm lắp ráp sẽ được đặt trong thư mục “target/production”. [profile.production] kế thừa = "phát hành" lto = true
  • Việc sử dụng try_reserve cho các loại Vec, String, HashMap, HashSet và VecDeque đã được ổn định, cho phép bạn dành trước không gian cho một số phần tử nhất định của một loại nhất định để giảm tần suất hoạt động cấp phát bộ nhớ và tránh bị treo trong quá trình hoạt động do thiếu bộ nhớ.
  • Được phép chỉ định macro có dấu ngoặc nhọn trong các biểu thức như "m!{ .. }.method()" và "m!{ .. }?".
  • Việc thực thi các hàm File::read_to_end và read_to_string đã được tối ưu hóa.
  • Hỗ trợ cho đặc tả Unicode đã được cập nhật lên phiên bản 14.0.
  • 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.
  • Đã thêm chương trình phụ trợ thử nghiệm để tạo mã bằng libgccjit.
  • 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; N]::as_mut_slice
    • [T; N]::as_slice
    • bộ sưu tập::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Chuỗi::try_reserve
    • Chuỗi::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Trình vòng lặp::map_while
    • iter::Mapwhile
    • proc_macro::is_available
    • Lệnh::get_program
    • Lệnh::get_args
    • Lệnh::get_envs
    • Lệnh::get_current_dir
    • LệnhArgs
    • CommandEnv
  • Thuộc tính “const”, xác định xem nó có thể được sử dụng trong bất kỳ ngữ cảnh nào thay vì hằng số hay không, được sử dụng trong hàm gợi ý::unreachable_unchecked.
  • Mức hỗ trợ thứ ba đã được triển khai cho armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi và armv7a-kmc- nền tảng Solid_asp3-eabihf. 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