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

Ngôn ngữ lập trình đa năng Rust 1.73, được thành lập bởi dự án Mozilla nhưng hiện được phát triển dưới sự bảo trợ của tổ chức phi lợi nhuận độc lập Rust Foundation, đã được phát hành. Ngôn ngữ tập trung vào sự an toàn của bộ nhớ và cung cấp phương tiện để đạt được tính song song công việc cao trong khi tránh sử dụng trình thu gom rác và thời gian chạy (thời gian chạy được giảm xuống để khởi tạo và bảo trì cơ bản của thư viện chuẩn).

Các phương pháp xử lý bộ nhớ của Rust cứu nhà phát triển khỏi các lỗi khi thao tác với con trỏ và bảo vệ chống lại các sự cố phát sinh do xử lý bộ nhớ ở mức độ thấp, chẳng hạn như truy cập vùng bộ nhớ sau khi nó được giải phóng, hủy bỏ tham chiếu con trỏ null, tràn bộ đệm, v.v. Để phân phối các thư viện, cung cấp các bản dựng và quản lý các phụ thuộc, dự án phát triển trình quản lý gói Hàng hóa. Kho lưu trữ crates.io được hỗ trợ để lưu trữ thư viện.

An toàn bộ nhớ được cung cấp trong Rust tại thời điểm biên dịch thông qua kiểm tra tham chiếu, theo dõi quyền sở hữu đối tượng, theo dõi thời gian tồn tại của đối tượng (phạm vi) và đánh giá tính chính xác của quyền truy cập bộ nhớ trong quá trình thực thi mã. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo bắt buộc các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, áp dụng khái niệm tham chiếu và biến bất biến theo mặc định, cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

Những đổi mới chính:

  • Переработано оформление сообщений, выдаваемых применяемым по умолчанию обработчиком аварийного завершения программы (panic). Текст, указанный в макросе «panic!» теперь показывается в отдельной строке без обрамления кавычками, что упрощает читаемость сообщения и устраняет путаницу при наличии в вложенных кавычек или разделения на несколько строк. fn main() { let file = «ferris.txt»; panic!(«oh no! {file:?} not found!»); } Было thread ‘main’ panicked at ‘oh no! «ferris.txt» not found!’, src/main.rs:3:5 Стало thread ‘main’ panicked at src/main.rs:3:5: oh no! «ferris.txt» not found!

    Также переработан вывод сообщений, показываемых при срабатывании макросов «assert_eq» и «assert_ne». fn main() { assert_eq!(«🦀», «🐟», «ferris is not a fish»); } Было thread ‘main’ panicked at ‘assertion failed: `(left == right)` left: `»🦀»`, right: `»🐟»`: ferris is not a fish’, src/main.rs:2:5 Cтало thread ‘main’ panicked at src/main.rs:2:5: assertion `left == right` failed: ferris is not a fish left: «🦀» right: «🐟»

  • В соответствии с RFC 3184 добавлена возможность прямой манипуляции локальными для потока (thread_local) ключами хранилища LocalKey<Cell<T>> и LocalKey<RefCell<T>> через использование методов get(), set(), take() и replace(), вместо использования замыкания «with(|inner| …)», что позволяет не выполнять дополнительный код инициализации для значений по умолчанию, указанных для новых потоков при помощи макроса «thread_local!». thread_local! { static THINGS: Cell<Vec<i32>> = Cell::new(Vec::new()); } fn f() { // было THINGS.with(|i| i.set(vec![1, 2, 3])); // стало THINGS.set(vec![1, 2, 3]); // … // было let v = THINGS.with(|i| i.take()); // стало let v: Vec<i32> = THINGS.take(); }
  • Một phần mới của API đã được chuyển sang danh mục ổn định, bao gồm các phương pháp và cách triển khai các đặc điểm đã được ổn định:
    • Unsigned {integer}::div_ceil
    • Unsigned {integer}::next_multiple_of
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey::<Cell<T>>::get
    • LocalKey::<Cell<T>>::set
    • LocalKey::<Cell<T>>::take
    • LocalKey::<Cell<T>>::replace
    • LocalKey::<RefCell<T>>::with_borrow
    • LocalKey::<RefCell<T>>::with_borrow_mut
    • LocalKey::<RefCell<T>>::set
    • LocalKey::<RefCell<T>>::take
    • LocalKey::<RefCell<T>>::replace
  • 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 hàm:
    • rc::Weak::new
    • sync::Weak::new
    • NonNull::as_ref
  • В компиляторе обеспечена запись информации о версии в секцию «.comment» по аналогии с GCC и Clang.
  • Реализован третий уровень поддержки для платформ aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl и x86_64-unknown-linux-ohos. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Реализован второй уровень поддержки целевой платформы wasm32-wasi-preview1-threads. Второй уровень поддержки подразумевает гарантию сборки.

Nguồn: opennet.ru

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