Dalam dunia grafis 3D, simulasi fisika, dan komputasi ilmiah, memiliki pustaka aljabar linear yang efisien sangatlah penting. Sebuah pustaka Rust baru bernama lin-alg telah muncul, menawarkan operasi vektor, quaternion, dan matriks untuk berbagai aplikasi termasuk grafis komputer, robotika, dan pemodelan ilmiah. Namun, ekosistem Rust sudah memiliki beberapa pilihan mapan di bidang ini, membuat komunitas mempertanyakan di mana posisi pustaka baru ini.
Ekosistem yang Ramai dengan Pemain Mapan
Ekosistem gamedev di Rust tampaknya terutama terbagi antara dua pustaka aljabar linear utama: nalgebra (umumnya digunakan dengan mesin fisika Rapier) dan glam. Ada juga bevy_math, yang menurut banyak komentator sebenarnya mengekspor ulang fungsionalitas glam, dan pustaka cgmath yang lebih lama yang tidak diperbarui sejak Januari 2021. Fragmentasi ini menciptakan tantangan bagi pengembang yang mencoba memilih alat yang tepat untuk proyek mereka, terutama ketika pustaka memiliki filosofi desain dan strategi optimasi yang berbeda.
Ekosistem gamedev tampaknya terbagi antara nalgebra (untuk pengguna Rapier) dan glam. Di mana posisi lin-alg?
Perbedaan Implementasi dan Pertimbangan Kinerja
Salah satu poin diskusi utama dalam komunitas berkaitan dengan bagaimana pustaka-pustaka ini mengimplementasikan tipe vektor secara internal, yang berdampak langsung pada kinerja. Menurut analisis komunitas, nalgebra menggunakan array berukuran tetap (Vec4 terstruktur sebagai [[f32; 4]; 1]), sementara lin-alg tampaknya menggunakan bidang individual (struktur dengan bidang x, y, z, w), dan glam memanfaatkan tipe SIMD (__m128) untuk beberapa operasi. Perbedaan implementasi ini sangat penting untuk aplikasi yang kritis terhadap kinerja.
Beberapa komentator menunjuk ke mathbench-rs, sebuah proyek benchmarking yang membandingkan berbagai pustaka matematika. Diskusi mengungkapkan bahwa untuk kinerja SIMD (Single Instruction, Multiple Data) yang optimal, banyak pengembang lebih memilih pendekatan yang berbeda dari yang digunakan glam - menyusun vektor untuk memproses beberapa masalah secara bersamaan daripada menggunakan SIMD untuk operasi vektor tunggal.
Pustaka Aljabar Linier dalam Ekosistem Rust
- nalgebra: Menggunakan array berukuran tetap, populer dengan mesin fisika Rapier
- glam: Menggunakan tipe SIMD untuk beberapa operasi, banyak digunakan dalam pengembangan game
- bevy_math: Mengekspor ulang fungsionalitas glam
- cgmath: Pustaka yang lebih lama, tidak diperbarui sejak Januari 2021
- lin-alg: Pustaka baru dengan implementasi bidang individual, dukungan no_std
Perbedaan Implementasi
Pustaka | Implementasi Vektor | Catatan |
---|---|---|
nalgebra | Array berukuran tetap ([[f32; 4]; 1] ) |
|
lin-alg | Bidang individual (struct dengan x,y,z,w) | |
glam | Tipe SIMD (__m128 ) untuk beberapa tipe |
Fitur Utama lin-alg
- Operasi vektor, matriks, dan quaternion
- Tipe berbasis f32 atau f64
- Dukungan no_std untuk sistem embedded
- Fungsionalitas grafis komputer tersedia melalui flag fitur
- Pengkodean/dekode biner Bincode melalui flag fitur
Dukungan no_std dan Flag Fitur
Salah satu aspek yang mungkin baru dari lin-alg adalah dukungan no_std-nya untuk sistem embedded. Namun, seorang komentator menunjukkan bahwa pendekatan pustaka terhadap flag fitur tidak mengikuti praktik yang direkomendasikan Rust. Pustaka ini menggunakan fitur no_std untuk menonaktifkan fungsionalitas pustaka standar, sedangkan komunitas Rust umumnya merekomendasikan memiliki fitur std yang secara kondisional mengaktifkan fitur pustaka standar. Pendekatan ini memastikan flag fitur tetap aditif, mengikuti prinsip desain Rust.
Motivasi Pengembang
Meskipun benchmark tidak disediakan, spekulasi komunitas tentang motivasi penulis dikonfirmasi oleh pembuat pustaka. Alih-alih fokus pada keunggulan kinerja, pustaka ini tampaknya dibuat karena frustrasi dengan operasi quaternion yang tidak konsisten di pustaka yang ada. Penulis menyebutkan mereka menggunakannya sebagai cara dengan gesekan rendah untuk melestarikan fungsi geometris di antara beberapa proyek, merasa lebih mudah untuk memodifikasi kode mereka sendiri daripada melalui proses pull request dengan pustaka lain.
Bagi pengembang yang mempertimbangkan pustaka aljabar linear mana yang akan digunakan dalam proyek Rust mereka, pilihannya tetap kompleks. Sementara opsi mapan seperti nalgebra dan glam memiliki basis pengguna yang lebih besar dan pengujian yang mungkin lebih menyeluruh, lin-alg menawarkan alternatif yang mungkin lebih cocok untuk kasus penggunaan tertentu, terutama di mana konsistensi operasi quaternion adalah prioritas atau di mana dukungan no_std diperlukan.
Referensi: Vectors, quaternions, and matrices for general purposes, and computer graphics.