Thư viện Đại số Tuyến tính Mới Gia nhập Hệ sinh thái Rust Đông đúc: So sánh Ra sao?

BigGo Editorial Team
Thư viện Đại số Tuyến tính Mới Gia nhập Hệ sinh thái Rust Đông đúc: So sánh Ra sao?

Trong thế giới đồ họa 3D, mô phỏng vật lý và tính toán khoa học, việc có các thư viện đại số tuyến tính hiệu quả là vô cùng quan trọng. Một thư viện Rust mới có tên là lin-alg đã xuất hiện, cung cấp các phép toán vector, quaternion và ma trận cho nhiều ứng dụng khác nhau bao gồm đồ họa máy tính, robot học và mô hình hóa khoa học. Tuy nhiên, hệ sinh thái Rust đã có sẵn một số lựa chọn đã được thiết lập trong lĩnh vực này, khiến cộng đồng đặt câu hỏi về vị trí của thư viện mới này.

Hệ sinh thái Đông đúc với Những Tên tuổi Đã được Thiết lập

Hệ sinh thái phát triển game trong Rust dường như chủ yếu chia thành hai thư viện đại số tuyến tính chính: nalgebra (thường được sử dụng với công cụ vật lý Rapier) và glam. Cũng có bevy_math, mà nhiều người bình luận lưu ý thực chất là tái xuất chức năng của glam, và thư viện cgmath cũ hơn chưa được cập nhật kể từ tháng 1 năm 2021. Sự phân mảnh này tạo ra thách thức cho các nhà phát triển khi cố gắng chọn công cụ phù hợp cho dự án của họ, đặc biệt khi các thư viện có triết lý thiết kế và chiến lược tối ưu hóa khác nhau.

Hệ sinh thái phát triển game dường như bị chia giữa nalgebra (cho người dùng Rapier) và glam. lin-alg phù hợp ở đâu?

Sự khác biệt trong Triển khai và Cân nhắc về Hiệu suất

Một trong những điểm thảo luận chính trong cộng đồng xoay quanh cách các thư viện này triển khai các kiểu vector bên trong, điều này ảnh hưởng trực tiếp đến hiệu suất. Theo phân tích của cộng đồng, nalgebra sử dụng mảng kích thước cố định (Vec4 được cấu trúc như [[f32; 4]; 1]), trong khi lin-alg dường như sử dụng các trường riêng lẻ (một struct với các trường x, y, z, w), và glam tận dụng các kiểu SIMD (__m128) cho một số phép toán. Những khác biệt trong triển khai này có ý nghĩa đáng kể đối với các ứng dụng đòi hỏi hiệu suất cao.

Một số người bình luận đã chỉ ra mathbench-rs, một dự án đánh giá hiệu suất so sánh các thư viện toán học khác nhau. Cuộc thảo luận cho thấy để có hiệu suất SIMD (Single Instruction, Multiple Data) tối ưu, nhiều nhà phát triển thích một cách tiếp cận khác với những gì glam sử dụng - cấu trúc vector để xử lý nhiều vấn đề đồng thời thay vì sử dụng SIMD cho một phép toán vector đơn lẻ.

Các thư viện đại số tuyến tính trong hệ sinh thái Rust

  • nalgebra: Sử dụng mảng kích thước cố định, phổ biến với công cụ vật lý Rapier
  • glam: Sử dụng các kiểu SIMD cho một số hoạt động, được sử dụng rộng rãi trong phát triển trò chơi
  • bevy_math: Tái xuất chức năng của glam
  • cgmath: Thư viện cũ hơn, không được cập nhật kể từ tháng 1 năm 2021
  • lin-alg: Thư viện mới với triển khai trường riêng lẻ, hỗ trợ no_std

Sự khác biệt trong triển khai

Thư viện Triển khai Vector Ghi chú
nalgebra Mảng kích thước cố định ([[f32; 4]; 1])
lin-alg Các trường riêng lẻ (struct với x,y,z,w)
glam Kiểu SIMD (__m128) cho một số loại

Tính năng chính của lin-alg

  • Các phép toán vector, ma trận và quaternion
  • Các kiểu dựa trên f32 hoặc f64
  • Hỗ trợ no_std cho hệ thống nhúng
  • Chức năng đồ họa máy tính có sẵn thông qua cờ tính năng
  • Mã hóa/giải mã nhị phân Bincode thông qua cờ tính năng

Hỗ trợ no_std và Cờ Tính năng

Một khía cạnh có thể mới của lin-alg là hỗ trợ no_std cho các hệ thống nhúng. Tuy nhiên, một người bình luận đã chỉ ra rằng cách tiếp cận của thư viện đối với cờ tính năng không tuân theo các thực hành được khuyến nghị của Rust. Thư viện sử dụng tính năng no_std để vô hiệu hóa chức năng thư viện tiêu chuẩn, trong khi cộng đồng Rust thường khuyến nghị có một tính năng std để bật có điều kiện các tính năng thư viện tiêu chuẩn. Cách tiếp cận này đảm bảo cờ tính năng vẫn mang tính bổ sung, tuân theo các nguyên tắc thiết kế của Rust.

Động lực của Nhà phát triển

Mặc dù không có các bài kiểm tra hiệu suất được cung cấp, suy đoán của cộng đồng về động lực của tác giả đã được xác nhận bởi người tạo thư viện. Thay vì tập trung vào lợi thế hiệu suất, thư viện dường như được tạo ra do sự thất vọng với các phép toán quaternion không nhất quán trong các thư viện hiện có. Tác giả đề cập rằng họ sử dụng nó như một cách ít ma sát để bảo tồn các hàm hình học giữa nhiều dự án, thấy việc sửa đổi codebase của riêng họ dễ dàng hơn là thông qua quy trình pull request với các thư viện khác.

Đối với các nhà phát triển đang cân nhắc thư viện đại số tuyến tính nào để sử dụng trong các dự án Rust của họ, lựa chọn vẫn còn phức tạp. Trong khi các lựa chọn đã được thiết lập như nalgebra và glam có cơ sở người dùng lớn hơn và có thể kiểm tra kỹ lưỡng hơn, lin-alg cung cấp một giải pháp thay thế có thể phù hợp hơn với các trường hợp sử dụng cụ thể, đặc biệt là nơi tính nhất quán trong phép toán quaternion là ưu tiên hoặc nơi cần hỗ trợ no_std.

Tham khảo: Vectors, quaternions, and matrices for general purposes, and computer graphics.