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

được phát hành phát hành ngôn ngữ lập trình hệ thống Rỉ 1.40được thành lập bởi dự án Mozilla. Ngôn ngữ này tập trung vào quản lý bộ nhớ an toàn, cung cấp khả năng quản lý bộ nhớ tự động và cung cấp các phương tiện để đạt được tính song song công việc cao đồng thời tránh sử dụng trình thu gom rác và 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 khả năng đánh dấu cấu trúc (struct) và bảng liệt kê (enum với khối Variant) bằng thuộc tính "#[không_đầy đủ]", cái mà cho phép trong tương lai, hãy thêm các trường và tùy chọn mới vào cấu trúc và bảng liệt kê đã khai báo. Ví dụ: nhà phát triển mô-đun có cấu trúc với các trường được khai báo công khai có thể sử dụng "#[non_exhaustive]" để đánh dấu các cấu trúc có thể được thêm trường mới trong tương lai. Cho đến thời điểm hiện tại, trong tình huống này, nhà phát triển buộc phải lựa chọn giữa việc khai báo các trường riêng tư và ràng buộc với một danh sách các trường bất biến. Thuộc tính mới loại bỏ giới hạn này và cho phép bạn thêm các trường mới trong tương lai mà không có nguy cơ phá vỡ mã bên ngoài đã biên dịch trước đó. Trong các gói thùng, khi khớp các tùy chọn trong phần “khớp”, cần phải có định nghĩa rõ ràng về mặt nạ “_ => {...}”, bao gồm các trường có thể có trong tương lai, nếu không sẽ hiển thị lỗi khi thêm trường mới.
  • Thêm khả năng gọi macro thủ tục mac!() trong ngữ cảnh kiểu. Ví dụ: bây giờ bạn có thể viết “type Foo = Expand_to_type!(bar);” nếu “expand_to_type” là macro thủ tục.
  • Trong khối "extern { ... }" thêm khả năng sử dụng macro thủ tục và thuộc tính, bao gồm macro “bang!()”, ví dụ:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    bên ngoài {
    make_item!(alpha);
    make_item!(beta);
    }

    bên ngoài "C" {
    #[my_identity_macro] fn foo();
    }

  • Trong macro thực hiện khả năng tạo ra các phần tử “macro_rules!”. Đang tạo "macro_rules!" có thể cả ở dạng macro giống chức năng (“mac!()”) và trong macro ở dạng thuộc tính (“#[mac]”).
  • Trong phần tử ánh xạ $m:meta thêm hỗ trợ các giá trị liệt kê mã thông báo tùy ý (“[TOKEN_STREAM]”, “{TOKEN_STREAM}” và “(TOKEN_STREAM)”), ví dụ:

    macro_rules! chấp nhận_meta { ($m:meta) => {} }
    Accept_meta!( my::path );
    Accept_meta!( my::path = "lit" );
    Accept_meta!( my::path ( a b c ) );
    Accept_meta!( my::path [ a b c ] );
    Accept_meta!( my::path { a b c } );

  • Trong chế độ Rust 2015, đầu ra lỗi được bật cho các sự cố được xác định khi kiểm tra việc mượn các biến (trình kiểm tra mượn) bằng kỹ thuật NLL (Thời gian sống không từ vựng). Trước đây, các cảnh báo được thay thế bằng lỗi khi chạy ở chế độ Rust 2018.
    Sau khi thay đổi được mở rộng sang chế độ Rust 2015, các nhà phát triển cuối cùng đã có thể thoát khỏi từ người kiểm tra khoản vay cũ.

    Chúng ta hãy nhớ lại rằng hệ thống xác minh dựa trên một cơ chế mới để tính đến thời gian tồn tại của các biến mượn đã giúp xác định một số vấn đề mà mã xác minh cũ không nhận thấy. Do lỗi xuất ra khi kiểm tra như vậy có thể ảnh hưởng đến khả năng tương thích với mã đang hoạt động trước đó nên ban đầu cảnh báo được đưa ra thay vì lỗi.

  • 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 cho hàm is_power_of_two (đối với số nguyên không dấu).
  • Một phần mới của API đã được chuyển sang danh mục ổn định, bao gồm macro todo!() và các phương thức slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, đã được ổn định.
    Tùy chọn::as_deref, Tùy chọn::as_deref_mut, Tùy chọn::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes và {f32,f64}::from_ne_bytes.

  • Trong hàng hóa quản lý gói
    thực hiện cảnh báo trình biên dịch bộ nhớ đệm trên đĩa. Đã thêm tùy chọn "siêu dữ liệu hàng hóa" vào lệnh "siêu dữ liệu hàng hóa"--filter-nền tảng" để chỉ hiển thị các gói được liên kết với nền tảng đích đã chỉ định trong cột độ phân giải phụ thuộc. Đã thêm tùy chọn cấu hình phiên bản http.ssl để xác định các phiên bản TLS hợp lệ.
    Đã thêm khả năng xuất bản phần "sự phụ thuộc vào nhà phát triển" mà không chỉ định khóa "phiên bản".

  • Trình biên dịch Rustc cung cấp hỗ trợ cấp độ thứ ba cho các nền tảng đích Thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 và mips64el-unknown-linux-muslabi64. 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