Phát hành ngôn ngữ lập trình Rust 1.75 và unikernel Hermit 0.6.7

Ngôn ngữ lập trình đa năng Rust 1.75, đượ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:

  • Đã thêm khả năng sử dụng ký hiệu “async fn” và “->impl Trait” trong các đặc điểm riêng tư. Ví dụ: bằng cách sử dụng “->impl Trait”, bạn có thể viết một phương thức trait trả về một iterator: trait Container { fn items(&self) -> impl Iterator; } impl Vùng chứa cho MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Bạn cũng có thể tạo các đặc điểm bằng cách sử dụng "async fn": trait HttpService { async fnfetch(&self, url: Url) -> HtmlBody; // sẽ được mở rộng thành: // fnfetch(&self, url: Url) -> impl Future; }

  • Đã thêm API để tính toán độ lệch byte liên quan đến con trỏ. Khi làm việc với các con trỏ trần (“*const T” và “*mut T”), có thể cần phải thực hiện các thao tác để thêm phần bù vào con trỏ. Trước đây, để làm điều này, bạn có thể sử dụng cấu trúc như “::add(1)”, thêm số byte tương ứng với kích thước của “size_of::()”. API mới đơn giản hóa thao tác này và cho phép thao tác bù byte mà không cần chuyển kiểu thành "*const u8" hoặc "*mut u8".
    • con trỏ::byte_add
    • con trỏ::byte_offset
    • con trỏ::byte_offset_from
    • con trỏ::byte_sub
    • con trỏ::wrapping_byte_add
    • con trỏ::wrapping_byte_offset
    • con trỏ::wrapping_byte_sub
  • Tiếp tục làm việc để tăng hiệu suất của trình biên dịch Rustc. Đã thêm trình tối ưu hóa BOLT, chạy ở giai đoạn đăng liên kết và sử dụng thông tin từ hồ sơ thực thi được chuẩn bị trước. Sử dụng BOLT cho phép bạn tăng tốc độ thực thi trình biên dịch khoảng 2% bằng cách thay đổi bố cục của mã thư viện librustc_driver.so để sử dụng bộ nhớ đệm của bộ xử lý hiệu quả hơn.

    Bao gồm việc xây dựng trình biên dịch Rustc với tùy chọn "-Ccodegen-units=1" để cải thiện chất lượng tối ưu hóa trong LLVM. Các thử nghiệm được thực hiện cho thấy hiệu suất tăng trong trường hợp bản dựng “-Ccodegen-units=1” khoảng 1.5%. Các tối ưu hóa bổ sung chỉ được bật theo mặc định cho nền tảng x86_64-unknown-linux-gnu.

    Các tính năng tối ưu hóa được đề cập trước đây đã được Google thử nghiệm để giảm thời gian xây dựng các thành phần nền tảng Android được viết bằng Rust. Việc sử dụng “-C codegen-units=1” khi xây dựng Android cho phép chúng tôi giảm kích thước của bộ công cụ xuống 5.5% và tăng hiệu suất của nó lên 1.8%, trong khi thời gian xây dựng của bộ công cụ gần như tăng gấp đôi.

    Việc kích hoạt tính năng thu thập rác tại thời gian liên kết (“--gc-sections”) mang lại hiệu suất tăng lên tới 1.9%, cho phép tối ưu hóa thời gian liên kết (LTO) lên tới 7.7% và tối ưu hóa dựa trên hồ sơ (PGO) lên tới 19.8%. Cuối cùng, các tối ưu hóa đã được áp dụng bằng tiện ích BOLT, giúp tăng tốc độ xây dựng lên 24.7%, nhưng kích thước của bộ công cụ đã tăng 10.9%.

    Phát hành ngôn ngữ lập trình Rust 1.75 và unikernel Hermit 0.6.7

  • 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:
    • Nguyên tử*::from_ptr
    • FileTimes
    • FileTimesExt
    • Tập tin::set_modified
    • Tập tin::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Tùy chọn::as_slice
    • Tùy chọn::as_mut_slice
    • con trỏ::byte_add
    • con trỏ::byte_offset
    • con trỏ::byte_offset_from
    • con trỏ::byte_sub
    • con trỏ::wrapping_byte_add
    • con trỏ::wrapping_byte_offset
    • con trỏ::wrapping_byte_sub
  • 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:
    • Ipv6Addr::to_ipv4_mapped
    • Có lẽUninit::assume_init_read
    • Có lẽUninit::zeroed
    • nhớ::phân biệt đối xử
    • ghi nhớ::không
  • Cấp độ hỗ trợ thứ ba đã được triển khai cho các nền tảng csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd và mipsel-unknown-netbsd. Cấp độ thứ ba bao gồm hỗ trợ cơ bản nhưng không có thử nghiệm tự động, xuất bản các bản dựng chính thức hoặc kiểm tra xem mã có thể được xây dựng hay không.

Ngoài ra, chúng ta có thể lưu ý một phiên bản mới của dự án Hermit, phiên bản này phát triển một hạt nhân chuyên dụng (unikernel), được viết bằng ngôn ngữ Rust, cung cấp các công cụ để xây dựng các ứng dụng độc lập có thể chạy trên bộ ảo hóa hoặc phần cứng trần mà không cần các lớp bổ sung. và không có hệ điều hành. Khi được xây dựng, ứng dụng được liên kết tĩnh với một thư viện, thư viện này thực hiện độc lập tất cả các chức năng cần thiết mà không bị ràng buộc với nhân hệ điều hành và các thư viện hệ thống. Mã dự án được phân phối theo giấy phép Apache 2.0 và MIT. Assembly được hỗ trợ để thực thi độc lập các ứng dụng được viết bằng Rust, Go, Fortran, C và C++. Dự án cũng đang phát triển bộ tải khởi động riêng cho phép bạn khởi chạy Hermit bằng QEMU và KVM.

Nguồn: opennet.ru

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