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

được phát hành phát hành ngôn ngữ lập trình hệ thống Rỉ 1.36, được thành lập 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:

  • Tính trạng ổn định Tương lai, đại diện cho một giá trị mà việc đánh giá của nó có thể chưa được hoàn thành trong khi sử dụng các khối async / .await. Các giá trị không đồng bộ được xác định bằng Tương lai giúp có thể tiếp tục thực hiện công việc hữu ích trong luồng, đồng thời chờ hoàn thành các phép tính của một giá trị nhất định;
  • Thư viện đã ổn định cấp phát, cung cấp các con trỏ và bộ sưu tập thông minh để quản lý các giá trị được cấp phát bộ nhớ. Cấp phát bộ nhớ trong std hiện sử dụng kiểu Một vật, được tái xuất từ ​​alloc. Việc sử dụng phân bổ riêng biệt có ý nghĩa trong các ứng dụng không bị ràng buộc với std (“#![no_std]”), cũng như trong các thư viện được thiết kế để sử dụng trong các chương trình tương tự không có std;
  • Để bỏ qua việc kiểm tra việc khởi tạo chính xác các giá trị đề xuất loại trung gian Có lẽĐơn vị, có thể được sử dụng thay cho hàm mem::uninitialized như một giải pháp thay thế an toàn hơn. Hàm mem::uninitialized thuận tiện cho việc tạo nhanh các mảng, nhưng nó đánh lừa trình biên dịch vì nó có vẻ như đã được khởi tạo, nhưng trên thực tế, giá trị vẫn chưa được khởi tạo. MaybeUninit cho phép bạn chỉ rõ cho trình biên dịch rằng giá trị chưa được khởi tạo, tính đến hành vi không xác định có thể có liên quan đến điều này và cũng để tổ chức kiểm tra trong các chương trình thông qua “maybe_t:” và khởi tạo từng bước, đánh dấu sự hoàn thành của nó bằng cách sử dụng lệnh gọi “.assume_init()”. Với sự ra đời của MaybeUninit, hàm mem::uninitialized đã không còn được dùng nữa và không được khuyến nghị sử dụng;
  • Kỹ thuật NLL (Non-Lexical Lifetimes), mở rộng hệ thống ghi lại thời gian tồn tại của các biến mượn, đã được ổn định cho ngôn ngữ Rust 2015 (ban đầu, NLL chỉ được hỗ trợ bởi Rust 2018). Thay vì cam kết thời gian tồn tại ở cấp độ từ vựng, NLL thực hiện điều đó ở cấp độ tập hợp các con trỏ trong biểu đồ luồng thực thi. Cách tiếp cận này cho phép bạn nâng cao chất lượng kiểm tra việc mượn các biến (trình kiểm tra mượn) và cho phép thực thi một số loại mã chính xác, việc sử dụng mã này trước đây đã dẫn đến lỗi. Hành vi mới cũng làm cho việc gỡ lỗi trở nên dễ dàng hơn nhiều;
  • Bao gồm việc triển khai mới các mảng kết hợp Bản đồ băm, dựa trên ứng dụng của cấu trúc Bàn Thụy Sĩ (tự động tải băm nâu::HashMap, trừ khi có quy định rõ ràng khác, chẳng hạn như std::HashMap, dựa trên SipHash 1-3). Giao diện phần mềm vẫn giữ nguyên và sự khác biệt mà nhà phát triển nhận thấy là do hiệu suất tăng lên và giảm mức tiêu thụ bộ nhớ;
  • Trong hàng hóa quản lý gói thêm tùy chọn “--offline”, cho phép hoạt động mà không cần truy cập mạng, trong đó chỉ các gói được lưu trong bộ nhớ đệm trong hệ thống cục bộ mới được sử dụng khi cài đặt các phần phụ thuộc. Nếu phần phụ thuộc không có trong bộ đệm cục bộ thì sẽ xảy ra lỗi. Để tải trước các phần phụ thuộc vào bộ đệm cục bộ trước khi ngoại tuyến, bạn có thể sử dụng lệnh “tìm nạp hàng hóa”;
  • Đã triển khai khả năng gọi macro “dbg!” chỉ ra một số đối số;
  • Thuộc tính “const”, xác định khả năng sử dụng trong bất kỳ ngữ cảnh nào thay vì hằng số, được sử dụng cho các phương thức
    Bố cục::from_size_align_unchecked,
    ghi nhớ::need_drop,
    NonNull::lơ lửng và
    NonNull::cast;

  • Một phần API mới đã được chuyển sang danh mục ổn định, bao gồm các phương pháp đã được ổn định
    nhiệm vụ::Waker, nhiệm vụ::Thăm dò ý kiến,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Đọc::read_vectored, Viết::write_vectored,
    Trình vòng lặp::được sao chép,
    BorrowMut (cho chuỗi) và str::as_mut_ptr.

Nguồn: opennet.ru

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