Dosya sistemlerinde Rust kullanmak
Hedefler
- Rust'ın tür sistemini kullanarak daha fazla hatayı derleme zamanında yakalamak
- Kaynak temizliği gibi işleri otomatikleştirerek C koduna göre üretkenliği artırmak
- Bellekle ilgili güvenlik açıklarını azaltmak ve hata ayıklama süresini kısaltmak
Rust'ın avantajları
- Rust, tanımsız davranışı ortadan kaldırır ve kod içinde neler olup bittiğini görebilme imkânı sunar
- Rust ile yazılmış kodun doğruluğu kanıtlanabilir, bu da özellik geliştirmeyi engelleyen hataları azaltır
Rust tür sistemine örnek
iget_locked() fonksiyonunun karmaşık gereksinimleri vardır
- Rust'ta bunun yerine
get_or_create_inode() fonksiyonu kullanılabilir ve bu gereksinimler tür sistemi aracılığıyla zorunlu kılınır
API adı değişikliği tartışması
- C API ile Rust API arasındaki ad uyumsuzluğu sorunu
- Mevcut geliştirici topluluğu için alışılmadık olabilir
- Adların eşleştirilmesi gerekebilir
Genel sorunlar
- Rust soyutlamalarının tüm çekirdek dosya sistemlerinde genel olarak kullanılıp kullanılmayacağına, yoksa yalnızca Rust ile yazılmış basit dosya sistemlerine mi odaklanılacağına karar verilmesi gerekiyor
- C kodu evrildikçe Rust koduyla senkronizasyon sorunları ortaya çıkabilir
Nesne yaşam döngüsü sorunu
- Nesne yaşam döngüsü dosya sistemine göre farklılık gösterebilir
- Rust API'sine tek bir yaşam döngüsü kodlamak bazı dosya sistemlerinde çalışmayabilir
Rust binding'lerinin sorunları
- Tüm dosya sistemleri hemen Rust'a geçmeyecek
- C kodu evrildikçe Rust binding'leri bozulabilir
- Rust binding'leri bozulursa bu, Rust-for-Linux geliştiricilerinin sorunu olarak kalır
Sonuç
- C kodunun evrilmesine izin verirken Rust binding'lerini geliştirmeye devam etmek
- Rust tür sistemine çok fazla anlam kodlamanın iyi mi kötü mü olduğu zamanla netleşecek
GN⁺ özeti
- Rust'ı dosya sistemlerine getirmek, bellek güvenliği ve üretkenliği artırmada büyük fayda sağlayacaktır
- Rust tür sistemi aracılığıyla karmaşık API gereksinimleri zorunlu kılınabildiği için kodun doğruluğu artar
- Mevcut C geliştiricileri Rust öğrenmezse senkronizasyon sorunları gibi zorluklar ortaya çıkabilir
- Rust binding'leri bozulursa bunları düzeltmek Rust-for-Linux geliştiricilerine düşecektir
- Benzer işlevlere sahip projelerden biri Google'ın Fuchsia OS'idir
1 yorum
Hacker News görüşü
Her dosya sistemi inode yaşam döngüsünü farklı şekilde yönetirken bunu aynı fonksiyonla yönetmek, soyutlama katmanının tersine gidiyor
Rust'ın C çağrılarını daha kolay hale getirmek için değişmesi gerekip gerekmediğine dair bir soru var
Rust API'sinin C API'sini sarmalayıp sarmalamadığı ya da yeniden uygulayıp uygulamadığı net değil
Rust'ı kernel'e eklemek ek karmaşıklık yaratıyor
Tartışma oldukça medeni
Linux kernel'inde daha fazla seçeneğin olması her zaman faydalı
unsafeblokları kullanmadan C'nin yaptığı her şeyi yapmak mümkün değillwn.net sayfasının altındaki bazı yorumlar kaba
C API ile Rust API arasındaki isim uyumsuzluğu meselesi üzerine tartışma