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

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

  • Đã thêm chế độ biên dịch theo đường ống (đường ống), trong đó quá trình xây dựng gói thùng phụ thuộc bắt đầu ngay khi siêu dữ liệu phụ thuộc có sẵn mà không cần đợi quá trình biên dịch hoàn tất. Khi biên dịch một gói, bạn không cần phải tập hợp tất cả các phần phụ thuộc; bạn chỉ cần xác định siêu dữ liệu, bao gồm danh sách các loại, phần phụ thuộc và các mục đã xuất. Siêu dữ liệu được cung cấp sớm trong quá trình biên dịch, vì vậy các gói được liên kết hiện có thể được biên dịch sớm hơn nhiều. Khi xây dựng các gói đơn lẻ, chế độ đề xuất không ảnh hưởng đến hiệu suất, nhưng nếu bản dựng bao gồm các gói có phụ thuộc phân nhánh thì thời gian xây dựng tổng thể có thể giảm 10-20%;
  • Đảm bảo phát hiện việc sử dụng chức năng không chính xác std::mem::chưa được khởi tạo и std::mem::zeroed. Ví dụ, std::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 thực tế giá trị vẫn chưa được khởi tạo. Hàm mem::uninitialized đã được đánh dấu là không dùng nữa và thay vào đó nên sử dụng loại trung gian Có lẽĐơn vị. Đối với mem::zeroed, hàm này có thể gây ra sự cố với các loại không thể chấp nhận giá trị 0.

    Để giúp xác định hành vi không xác định, bản phát hành mới bổ sung tính năng kiểm tra tìm lỗi mã nguồn vào trình biên dịch để phát hiện một số vấn đề với mem::uninitialized hoặc mem::zeroed. Ví dụ: bây giờ bạn gặp lỗi khi cố gắng sử dụng mem::uninitialized hoặc mem::zeroed với các loại &T và Box‹T>, đại diện cho các đối tượng con trỏ không thể chấp nhận giá trị null;

  • Thuộc tính “#[không dùng nữa]” đã được mở rộng để cho phép các gói thùng được đánh dấu là lỗi thời và được lên lịch xóa trong tương lai. Kể từ Rust 1.38, thuộc tính này cũng có thể được sử dụng cho macro;
  • Đã thêm khả năng sử dụng thuộc tính “#[global_allocator]” trong mô-đun con;
  • Đã thêm chức năng std::any::type_name, cho phép bạn tìm ra tên loại, có thể hữu ích cho mục đích gỡ lỗi. Ví dụ: trong quá trình thực hiện chương trình, bạn có thể tìm ra loại hàm được gọi:

    fn gen_value‹T: Mặc định>() -> T {
    println!("Đang khởi tạo một phiên bản của {}", std::any::type_name::‹T></());
    Mặc định mặc định()
    }

    fn chính() {
    hãy _: i32 = gen_value(); # "i32" sẽ được in
    hãy _: Chuỗi = gen_value(); # sẽ in "alloc::string::String"
    }

  • Các chức năng mở rộng của thư viện tiêu chuẩn:
    • slice::{concat, connect, join} hiện có thể nhận giá trị &[T] ngoài &T;
    • "*const T" và "*mut T" hiện triển khai marker::Unpin;
    • "Arc‹[T]></" và "Rc‹[T]>" hiện triển khai FromIterator‹T>;
    • iter::{StepBy, Peekable, Take} hiện triển khai DoubleEndedIterator.
    • ascii::EscapeDefault triển khai Sao chép và Hiển thị.
  • 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
    • ‹*const T></::cast, ‹*mut T>::cast,
    • Thời lượng::as_secs_f{32|64},
    • Thời lượng::div_duration_f{32|64},
    • Thời lượng::div_f{32|64},
    • Thời lượng::from_secs_f{32|64},
    • Thời lượng::mul_f{32|64},
    • phép chia có số dư
      div_euclid và rem_euclid cho tất cả các số nguyên nguyên thủy;

  • Đã thêm hỗ trợ để chỉ định tùy chọn “--features” nhiều lần để kích hoạt các tính năng khác nhau trong trình quản lý gói hàng;
  • Trình biên dịch cung cấp một phần ba mức độ hỗ trợ cho các nền tảng đích aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc, armv7-unknown-linux -gnueabi, armv7-unknown-linux-musleabi, hex-unknown-linux-musl và riscv32i-unknown-none-elf. Cấp độ thứ ba bao gồm hỗ trợ cơ bản nhưng không có thử nghiệm tự động và xuất bản các bản dựng chính thức.

Nguồn: opennet.ru

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