Ngôn ngữ lập trình đa năng Rust 1.88, đượ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 chỉ định nhiều biểu thức "let" bên trong các khối điều kiện "if" và "while" bằng cách kết hợp chúng với toán tử "&&" (logic AND). Các biểu thức "let" có thể được kết hợp với các biểu thức điều kiện Boolean. Các biến được khai báo trong các biểu thức let có thể được sử dụng trong các biểu thức điều kiện tiếp theo, cũng như bên trong các khối "if" và "while". if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Đã thêm hỗ trợ cho việc viết các hàm "naked", được đánh dấu bằng thuộc tính "#[unsafe(naked)]" và chứa một lệnh gọi "naked_asm!" duy nhất bên trong. Các hàm được tạo theo cách này không có phần kết và phần mở đầu do trình biên dịch tạo ra, cho phép nhà phát triển kiểm soát hoàn toàn mã trình biên dịch dịch vụ được đính kèm vào hàm (một hàm "naked" chỉ chứa các lệnh trình biên dịch do nhà phát triển chỉ định và không bao gồm các trình xử lý đối số và giá trị trả về đặc biệt do trình biên dịch thêm vào). Các hàm "naked" được coi là một giải pháp thay thế thuận tiện hơn cho các hàm được định nghĩa trong khối "global_asm!". #[unsafe(naked)] pub unsafe extern "sysv64" fn wrap_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
- Ngôn ngữ vị ngữ được sử dụng trong các thuộc tính biên dịch có điều kiện "cfg" và "cfg_attr" (cho phép hoặc vô hiệu hóa các phần mã dựa trên các điều kiện được chỉ định) đã được mở rộng để hỗ trợ các ký tự Boolean "true" và "false", được xác định bằng các cấu hình luôn được bật hoặc luôn bị vô hiệu hóa. Các ký tự này cũng có thể được sử dụng trong macro "cfg!" và các bảng "[target]" trong các bản kê khai và cấu hình Cargo. Các biểu thức cfg(true) và cfg(false) có thể được sử dụng thay cho cfg(all()) và cfg(any()) để thể hiện rõ ràng hơn ý định của chúng.
- Trình quản lý gói Cargo hiện tự động chạy trình thu gom rác để dọn bộ nhớ đệm trong thư mục gốc của người dùng. Trước đây, các gói có phụ thuộc đã tải xuống được lưu trữ trong bộ nhớ đệm không được dọn dẹp, dẫn đến việc tiêu thụ dung lượng đĩa tăng liên tục. Cơ chế thu gom rác được bật sẽ tự động xóa các tệp crate được tải xuống bên ngoài không được truy cập trong hơn 3 tháng và các tệp crate được cài đặt cục bộ không được truy cập trong hơn một tháng. Việc dọn bộ nhớ đệm không được bắt đầu khi sử dụng các tùy chọn "--offline" hoặc "--frozen" trong crage.
- 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:
- Cell::cập nhật
- impl Mặc định cho *const T
- impl Mặc định cho *mut T
- chế độ ffi::c_str
- HashMap::trích xuất nếu
- HashSet::trích xuất_nếu
- hint::select_unpredictable
- proc_macro::Khoảng cách::dòng
- proc_macro::Span::column
- proc_macro::Khoảng cách::bắt đầu
- proc_macro::Khoảng cách::kết thúc
- proc_macro::Span::tệp
- proc_macro::Span::tệp_cục_bộ
- <[T]>::như_khối
- <[T]>::như_rchunks
- <[T]>::as_chunks_chưa được kiểm tra
- <[T]>::as_chunks_mut
- <[T]>::as_rchunks_mut
- <[T]>::as_chunks_unchecked_mut
- Dấu “const” được sử dụng trong các hàm:
- Không Null ::thay thế
- <*mut T>::thay thế
- std::ptr::swap_không_chồng_lại
- Cell::thay thế
- Tế bào::lấy
- Tế bào::get_mut
- Tế bào::từ_mut
- Cell::as_slice_of_cells
- Đã xóa mức hỗ trợ đầu tiên cho nền tảng mục tiêu i686-pc-windows-gnu.
Ngoài ra, chúng ta có thể lưu ý những sự kiện liên quan đến Rust sau đây:
- Dự án Munal OS phát triển một hệ điều hành thử nghiệm được viết bằng Rust và dựa trên khái niệm unikernel. Munal OS không sử dụng đa nhiệm ưu tiên, ánh xạ trang bộ nhớ hoặc không gian địa chỉ ảo (nó sử dụng bố cục bộ nhớ UEFI). Nhân và các ứng dụng được thực thi trong cùng một không gian địa chỉ bằng cách sử dụng mô hình bảo mật dựa trên WASM sandbox isolation (nó bao gồm công cụ wasmi để chạy các ứng dụng dưới dạng mã byte WebAssembly).
Hệ điều hành có giao diện đồ họa và hỗ trợ điều khiển bàn phím và chuột. Một bộ công cụ độc quyền với thư viện tiện ích được sử dụng để phát triển các ứng dụng đồ họa. Một ngăn xếp TCP và trình điều khiển thiết bị mạng được cung cấp để tương tác mạng. Các ứng dụng có sẵn cho Munal OS bao gồm trình duyệt web có hỗ trợ HTML và HTTPS cơ bản, trình soạn thảo văn bản và thiết bị đầu cuối để thực thi mã Python. Mã này được mở theo giấy phép MIT.

- Nhân kernel Asterinas 0.15.2, được viết bằng Rust và cung cấp ABI tương thích với kernel, đã được phát hành. LinuxNhân hệ điều hành hỗ trợ kiến trúc x86-64 và RISC-V và thực hiện 206 trong số 368 lệnh gọi hệ thống. LinuxCó 45 nhà phát triển, chủ yếu đến từ các trường đại học khác nhau của Trung Quốc, tham gia vào việc phát triển nhân hệ điều hành. Nhân được xây dựng bằng kiến trúc "framekernel", trong đó các thành phần của nhân được đặt trong không gian địa chỉ dùng chung, và bảo mật được đảm bảo thông qua việc tách biệt logic giữa mã an toàn và mã có thể dễ bị tổn thương về mặt bảo mật. Tất cả các lệnh gọi hệ thống, hệ thống tệp và trình điều khiển đều được triển khai ở lớp Dịch vụ Hệ điều hành và không được phép bao gồm các khối không an toàn. Mã nguồn được phân phối theo giấy phép MPL 2.0.
- Đối với phần cốt lõi Linux Tiện ích rsched được phát triển để phân tích số liệu thống kê của bộ lập lịch tác vụ. Trên thực tế, tiện ích này cho phép đánh giá các quyết định của bộ lập lịch liên quan đến việc phân bổ tài nguyên cho các tiến trình và theo dõi độ trễ lập lịch. Nhân hệ điều hành sử dụng hệ thống con BPF để thu thập dữ liệu, và chuỗi công cụ không gian người dùng được viết bằng ngôn ngữ Rust. Tiện ích này được viết bởi Chris Mason, người sáng tạo và kiến trúc sư trưởng của hệ thống tệp Btrfs.
- Collabora đã công bố phát triển một phiên bản Coccinelle dành riêng cho Rust. Coccinelle được thiết kế chủ yếu để tự động hóa việc tìm kiếm và chuyển đổi mã C trong nhân hệ điều hành. LinuxCác phép biến đổi được quy định dưới dạng các quy tắc, giống như các bản vá trừu tượng không gắn liền với một vị trí cụ thể nào trong mã.
- Các nhà phát triển GNOME đã giới thiệu glycin, một thư viện để tải hình ảnh được viết bằng Rust cung cấp giải mã hình ảnh cô lập hộp cát. Nó hỗ trợ phục vụ nội dung đã giải mã thông qua gdk::Textures và trích xuất siêu dữ liệu. Các ràng buộc được cung cấp để sử dụng glycin trong GTK4, cũng như một chương trình phụ trợ để sử dụng glycin trong thư viện GdkPixbuf được sử dụng trong GNOME để tải hình ảnh. Glycin đã được sử dụng trong trình xem hình ảnh Loupe, được cung cấp theo mặc định trong GNOME. Đồng thời, chương trình phụ trợ cho GdkPixbuf giúp có thể sử dụng glycin trong GNOME Shell, trình tạo hình thu nhỏ và các ứng dụng GNOME tùy ý mà không cần thay đổi các chương trình này.
Nguồn: opennet.ru

