Menggunakan Rust untuk sistem berkas
Tujuan
- Menggunakan sistem tipe Rust untuk menangkap lebih banyak kesalahan saat waktu kompilasi
- Meningkatkan produktivitas dibandingkan kode C dengan mengotomatiskan pekerjaan seperti pembersihan sumber daya
- Mengurangi kerentanan terkait memori dan mempersingkat waktu debugging
Kelebihan Rust
- Rust menghilangkan perilaku yang tidak terdefinisi dan menyediakan kemampuan untuk melihat apa yang sedang terjadi di dalam kode
- Kebenaran kode yang ditulis dengan Rust dapat dibuktikan, sehingga bug yang menghambat pengembangan fitur berkurang
Contoh sistem tipe Rust
- Fungsi
iget_locked() memiliki persyaratan yang kompleks
- Di Rust, ini dapat digantikan dengan fungsi
get_or_create_inode(), dan persyaratan tersebut ditegakkan melalui sistem tipe
Diskusi tentang perubahan nama API
- Ada masalah ketidaksesuaian nama antara API C dan API Rust
- Hal ini mungkin terasa tidak familier bagi komunitas pengembang yang sudah ada
- Menyamakan nama mungkin diperlukan
Masalah umum
- Perlu diputuskan apakah abstraksi Rust akan digunakan secara umum pada semua sistem berkas kernel, atau hanya difokuskan pada sistem berkas sederhana yang ditulis dengan Rust
- Saat kode C berevolusi, bisa muncul masalah sinkronisasi dengan kode Rust
Masalah siklus hidup objek
- Siklus hidup objek dapat berbeda-beda tergantung sistem berkasnya
- Jika satu siklus hidup tunggal dienkodekan ke dalam API Rust, hal itu mungkin tidak akan bekerja pada beberapa sistem berkas
Masalah pada binding Rust
- Tidak semua sistem berkas akan langsung beralih ke Rust
- Saat kode C berevolusi, binding Rust bisa rusak
- Jika binding Rust rusak, hal itu akan tetap menjadi masalah bagi para pengembang Rust-for-Linux
Kesimpulan
- Pengembangan binding Rust dilanjutkan sambil membiarkan kode C terus berevolusi
- Apakah mengodekan banyak makna ke dalam sistem tipe Rust itu baik atau buruk akan menjadi lebih jelas seiring waktu
Ringkasan GN⁺
- Mengadopsi Rust ke sistem berkas akan sangat membantu meningkatkan keamanan memori dan produktivitas
- Melalui sistem tipe Rust, persyaratan API yang kompleks dapat ditegakkan sehingga meningkatkan kebenaran kode
- Jika para pengembang C yang sudah ada tidak mempelajari Rust, kesulitan seperti masalah sinkronisasi dapat muncul
- Jika binding Rust rusak, penyelesaiannya akan menjadi tanggung jawab para pengembang Rust-for-Linux
- Proyek dengan fungsi serupa antara lain Fuchsia OS dari Google
1 komentar
Komentar Hacker News
Karena setiap file system mengelola siklus hidup inode secara berbeda, mengelolanya dengan fungsi yang sama justru bertentangan dengan lapisan abstraksi
Ada pertanyaan apakah Rust perlu diubah agar lebih mudah melakukan pemanggilan C
Tidak jelas apakah API Rust membungkus C API atau mengimplementasikannya ulang
Menambahkan Rust ke kernel menyebabkan kompleksitas tambahan
Diskusinya sangat beradab
Lebih banyak opsi di kernel Linux selalu bermanfaat
unsafe, Rust tidak bisa melakukan semua hal yang bisa dilakukan CBeberapa komentar di bagian bawah halaman lwn.net bersikap tidak sopan
Ada pembahasan tentang masalah ketidaksesuaian nama antara C API dan Rust API