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

diễn ra phát hành ngôn ngữ lập trình hệ thống Rỉ 1.34, được phát triển bởi dự án Mozilla. Ngôn ngữ này tập trung vào sự an toàn của 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 của tác vụ cao mà không cần sử dụng trình thu gom rác hoặc thời gian chạy.

Tính năng quản lý bộ nhớ tự động của Rust giải phóng nhà phát triển khỏi thao tác con trỏ và bảo vệ khỏi các vấn đề phát sinh từ thao tác bộ nhớ cấp thấp, chẳng hạn như truy cập bộ nhớ sau khi rảnh, hủy đăng ký con trỏ null, lỗi tràn bộ đệm, v.v. Một trình quản lý gói đang được phát triển để phân phối các thư viện, đảm bảo việc lắp ráp và quản lý các phần phụ thuộc của dự án. Cargo, cho phép bạn lấy các thư viện bạn cần cho chương trình chỉ bằng một cú nhấp chuột. Một kho lưu trữ được hỗ trợ cho các thư viện lưu trữ thùng.io.

Chính đổi mới:

  • Trình quản lý gói Hàng hóa đã thêm các công cụ để làm việc với các cơ quan đăng ký gói thay thế có thể cùng tồn tại với cơ quan đăng ký công khai Crates.io. Ví dụ: các nhà phát triển ứng dụng độc quyền hiện có thể sử dụng sổ đăng ký riêng của họ, sổ đăng ký này có thể được sử dụng khi liệt kê các phần phụ thuộc trong Cargo.toml và áp dụng mô hình phiên bản tương tự như Crates.io cho các sản phẩm của họ, cũng như giới thiệu các phần phụ thuộc cho cả hai thùng. io và vào sổ đăng ký của riêng bạn.

    Để thêm các cơ quan đăng ký bên ngoài vào .cargo/config (nằm trong $HOME hoặc trong thư mục gói)
    cung cấp phần “[đăng ký]” và để sử dụng sổ đăng ký bên ngoài, tùy chọn “đăng ký” đã xuất hiện trong phần mô tả của từng phần phụ thuộc trong Cargo.toml. Để kết nối với sổ đăng ký bổ sung, chỉ cần đặt mã thông báo xác thực vào tệp ~/.cargo/credentials và chạy lệnh
    "đăng nhập hàng hóa --registry=my-registry" và xuất bản một gói -
    "xuất bản hàng hóa -registry=my-registry";

  • Đã thêm hỗ trợ đầy đủ cho việc sử dụng toán tử “?”. trong các bài kiểm tra học thuyết, cho phép bạn sử dụng mã ví dụ từ tài liệu làm bài kiểm tra. Nhà điều hành trước đây
    "?" có thể được sử dụng để xử lý các lỗi trong quá trình thực hiện kiểm thử chỉ khi có hàm “fn main()” hoặc trong hàm “#[test]”;

  • Trong các thuộc tính tùy chỉnh được xác định bằng macro thủ tục bảo đảm khả năng sử dụng các bộ mã thông báo tùy ý (“#[attr($tokens)]”, “#[attr[$tokens]] và #[attr{$tokens}]”). Trước đây, các phần tử chỉ có thể được chỉ định ở dạng cây/đệ quy bằng cách sử dụng chuỗi ký tự, ví dụ “#[foo(bar, baz(quux, foo = “bar”))]”, nhưng bây giờ có thể sử dụng bảng liệt kê (' #[range(0. .10)]') và các cấu trúc như “#[bound(T: MyTrait)]”;
  • Các loại ổn định (đặc điểm) Thử từ и Thử vào, cho phép chuyển đổi loại có xử lý lỗi. Ví dụ: các phương thức như from_be_bytes với kiểu số nguyên sử dụng mảng làm đầu vào, nhưng dữ liệu thường có kiểu Slice và việc chuyển đổi giữa các mảng và lát là vấn đề khó thực hiện theo cách thủ công. Với sự trợ giúp của các đặc điểm mới, thao tác được chỉ định có thể được thực hiện nhanh chóng thông qua lệnh gọi tới .try_into(), ví dụ: “let num = u32::from_be_bytes(slice.try_into()?)”. Đối với các chuyển đổi luôn thành công (ví dụ: từ loại u8 sang u32), một loại lỗi đã được thêm vào Không thể sai lầm, cho phép sử dụng minh bạch
    TryFrom cho tất cả các triển khai "Từ" hiện có;

  • Chức năng đã không còn được dùng nữa CommandExt::trước_exec, cho phép thực thi một trình xử lý trước khi chạy exec, được thực thi trong bối cảnh một tiến trình con được phân nhánh sau lệnh gọi fork(). Trong những điều kiện như vậy, một số tài nguyên của quy trình gốc, chẳng hạn như bộ mô tả tệp và vùng bộ nhớ được ánh xạ, có thể bị trùng lặp, điều này có thể dẫn đến hành vi không xác định và hoạt động không chính xác của thư viện.
    Nên sử dụng hàm không an toàn thay vì before_exec CommandExt::pre_exec.

  • Các loại số nguyên nguyên tử có dấu và không dấu ổn định có kích thước từ 8 đến 64 bit (ví dụ: nguyên tửU8), cũng như các loại đã ký NonZeroI[8|16|32|64|128].
  • Một phần mới của API đã được chuyển sang danh mục ổn định, bao gồm Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] và các phương thức SystemTime đã được ổn định ::checked_[add|sub]. Các hàm iter::from_fn và iter::successors đã được ổn định;
  • Đối với tất cả các loại số nguyên, các phương thức đã kiểm tra_pow, bão hòa_pow, gói_pow và tràn_pow được triển khai;
  • Đã thêm khả năng kích hoạt tối ưu hóa ở giai đoạn liên kết bằng cách chỉ định tùy chọn xây dựng “-C linker-plugin-lto”.

Nguồn: opennet.ru

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