phát hành ngôn ngữ lập trình hệ thống , đượ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. , 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ữ .
Chính :
- cú pháp lập trình không đồng bộ mới dựa trên hàm "async", khối di chuyển không đồng bộ { ... } và toán tử ".await", giúp viết các trình xử lý không chặn luồng lệnh chính dễ dàng hơn. So với API được cung cấp trước đây cho I/O không đồng bộ, cấu trúc async/.await rất dễ hiểu, dễ đọc và cho phép bạn triển khai các tương tác không đồng bộ phức tạp bằng cách sử dụng các kỹ thuật kiểm soát luồng quen thuộc dựa trên vòng lặp, câu lệnh có điều kiện và ngoại lệ.
Cú pháp Async-await cho phép bạn tạo các hàm có thể tạm dừng quá trình thực thi của chúng, trả lại quyền điều khiển cho luồng chính và sau đó tiếp tục thực thi từ nơi chúng đã dừng lại. Ví dụ: cần phải tạm dừng như vậy khi xử lý I/O, trong đó công việc khác có thể được thực hiện trong khi chờ phần dữ liệu tiếp theo đến. Các hàm và khối được xác định bằng "async fn" và "async move" trả về một đặc điểm , định nghĩa một biểu diễn tính toán không đồng bộ bị trì hoãn. Bạn có thể trực tiếp bắt đầu tính toán hoãn lại và nhận kết quả bằng cách sử dụng toán tử “.await”. Không có hành động nào được thực hiện hoặc lên kế hoạch trước cho đến khi .await được gọi, cho phép tạo các cấu trúc lồng nhau phức tạp mà không cần thêm chi phí.
async fn first_function() -> u32 { .. }
...
hãy để tương lai = first_function();
...
cho kết quả: u32 = Future.await; - "#![feature(bind_by_move_pattern_guards)]", cho phép sử dụng các biến có kiểu liên kết "" trong các mẫu và sử dụng tham chiếu đến các biến này trong phần "if" của biểu thức "". Ví dụ: các công trình sau đây hiện được phép:
fn chính() {
hãy để mảng: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);mảng khớp {
nums
nếu nums.iter().sum::() == 10=> {
thả(số);
}
_ => không thể truy cập được!(),
}
} - Cho phép chỉ định khi xác định các tham số hàm, các bao đóng và các con trỏ hàm. Hỗ trợ các thuộc tính biên dịch có điều kiện (cfg, cfg_attr) kiểm soát chẩn đoán thông qua lint (cho phép, cảnh báo, từ chối và cấm) và các thuộc tính gọi macro phụ trợ.
fn len(
#[cfg(windows)] slice: &[u16], // sử dụng tham số trong Windows
#[cfg(not(windows))] slice: &[u8], // sử dụng trong hệ điều hành khác
) -> sử dụng {
lát.len()
} - Cảnh báo về các vấn đề đượ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), vào loại lỗi nghiêm trọng. 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 được chú ý. 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. Các cảnh báo hiện đã được thay thế bằng lỗi khi chạy ở chế độ Rust 2018. Trong bản phát hành tiếp theo, đầu ra lỗi cũng sẽ được triển khai ở chế độ Rust 2015, chế độ này cuối cùng sẽ loại bỏ trình kiểm tra mượn cũ;
- 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 hàm Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_byte,
cơ bụng, gói_abs và tràn_abs; - 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
Ghim::into_inner, Instant::checked_duration_since và Instant::saturating_duration_since; - Trình quản lý gói hàng hiện có khả năng sử dụng phần mở rộng “.toml” cho các tệp cấu hình. Đã thêm hỗ trợ sơ bộ để xây dựng thư viện tiêu chuẩn trực tiếp từ Cargo. Đã thêm cờ "--workspace", thay thế cờ "--all" gây tranh cãi. Một trường mới đã được thêm vào siêu dữ liệu "“, cho phép bạn xuất bản các phần phụ thuộc bằng cách chỉ định thẻ git và số phiên bản. Đã thêm tùy chọn kiểm tra "-Ztimings" để tạo báo cáo HTML về thời gian thực hiện của các giai đoạn biên dịch khác nhau.
- Trong trình biên dịch Rustc, các thông báo chẩn đoán bao gồm việc cắt bỏ những phần đuôi mã không vừa với thiết bị đầu cuối. Cung cấp mức hỗ trợ thứ ba cho các nền tảng mục tiêu
i686-unknown-uefi và sparc64-unknown-openbsd. 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
