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

được phát hành phát hành 1.47 của ngôn ngữ lập trình hệ thống Rust, đượ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 người thu gom rác и thời gian chạy (thời gian chạy tập trung vào việc khởi tạo và bảo trì cơ bản thư viện chuẩn).

Tính năng quản lý bộ nhớ tự động của Rust giúp nhà phát triển tránh khỏi lỗi khi thao tác với con trỏ và bảo vệ khỏi các vấn đề phát sinh do thao tác bộ nhớ ở mức độ thấp, chẳng hạn như truy cập vào vùng bộ nhớ sau khi nó được giải phóng, hủy bỏ con trỏ null, lỗi tràn bộ đệm, v.v. Để phân phối các thư viện, đảm bảo lắp ráp và quản lý các phần phụ thuộc, dự án phát triển một trình quản lý gói Cargo. 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:

  • Đã triển khai hỗ trợ cho các loại mảng bất cứ kích thước nào. Trước đây, do không thể xác định các hàm chung cho tất cả các giá trị số nguyên, thư viện tiêu chuẩn chỉ cung cấp hỗ trợ đặc điểm tích hợp cho các mảng có kích thước tối đa 32 phần tử (các đặc điểm cho mỗi kích thước được xác định tĩnh). Nhờ vào việc tạo ra chức năng của các tổng quát không đổi (“const generics”), có thể xác định các hàm chung cho bất kỳ kích thước mảng nào, nhưng chúng chưa được đưa vào các tính năng ngôn ngữ ổn định, mặc dù chúng được triển khai trong trình biên dịch và được Hiện nay có liên quan trong thư viện tiêu chuẩn cho các đặc điểm mảng có kích thước bất kỳ.

    Ví dụ: cấu trúc sau trong Rust 1.47 sẽ in nội dung của một mảng, mặc dù trước đó nó có thể gây ra lỗi:

    fn chính() {
    đặt xs = [0; 34];

    println!("{:?}", xs);
    }

  • Cung cấp đầu ra của các dấu vết ngắn hơn (backtrace), đầu ra trong các tình huống khẩn cấp. Các yếu tố không được quan tâm trong hầu hết các tình huống nhưng làm lộn xộn đầu ra và đánh lạc hướng sự chú ý khỏi nguyên nhân chính của vấn đề sẽ bị loại khỏi dấu vết. Để trả về dấu vết đầy đủ, bạn có thể sử dụng biến môi trường "RUST_BACKTRACE=full". Ví dụ, đối với mã

    fn chính() {
    hoảng loạn!();
    }

    Trước đây, dấu vết được xuất ra theo 23 giai đoạn, nhưng bây giờ nó sẽ giảm xuống còn
    3 bước giúp bạn nắm bắt ngay bản chất:

    chủ đề 'chính' hoảng loạn trước 'hoảng loạn rõ ràng', src/main.rs:2:5
    dấu vết ngăn xếp ngược:
    0: std::panicking::begin_panic
    tại /rustc/d…d75a/library/std/src/panicking.rs:497
    1: sân chơi::chính
    tại ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    tại /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Trình biên dịch Rustc đã được cập nhật để xây dựng bằng cách sử dụng LLVM 11 (Rỉ sét sử dụng LLVM làm phụ trợ cho Tạo mã). Đồng thời, khả năng xây dựng với các LLVM cũ hơn, lên tới phiên bản 8, vẫn được giữ lại, nhưng theo mặc định (trong dự án Rust-lang/llvm) hiện đang sử dụng LLVM 11. LLVM 11 dự kiến ​​sẽ được phát hành trong những ngày tới.
  • Trên nền tảng Windows, trình biên dịch Rustc cung cấp hỗ trợ cho phép kiểm tra tính toàn vẹn của luồng điều khiển (Control Flow Guard), được kích hoạt bằng cờ “-C control-flow-guard”. Trên các nền tảng khác, cờ này hiện bị bỏ qua.
  • Một phần mới của API đã được chuyển sang danh mục ổn định, bao gồm cả ổn định
    Nhận dạng::new_raw,
    Phạm vi::is_empty,
    RangeInclusive::is_empty,
    Kết quả::as_deref,
    Kết quả::as_deref_mut,
    Vec::rò rỉ,
    con trỏ::offset_from,
    f32::TAU và
    f64::TAU.

  • Thuộc tính “const”, xác định khả năng sử dụng nó trong bất kỳ ngữ cảnh nào thay vì hằng số, được sử dụng trong các phương thức:
    • mới cho tất cả các số nguyên khác 0;
    • đã kiểm tra_add, đã kiểm tra_sub, đã kiểm tra_mul, đã kiểm tra_neg, đã kiểm tra_shl, đã kiểm tra_shr, bão hòa_add, bão hòa_sub và bão hòa_mul cho tất cả các số nguyên;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowcase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace và is_ascii_control cho các loại char và u8.
  • Đối với FreeBSD có liên quan bộ công cụ từ FreeBSD 11.4 (FreeBSD 10 không hỗ trợ LLVM 11).

Nguồn: opennet.ru

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