2 puan yazan GN⁺ 2024-07-16 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-07-16
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

    • inode yaşam döngüsü dosya sistemi bazında yönetilmeli
  • Rust'ın C çağrılarını daha kolay hale getirmek için değişmesi gerekip gerekmediğine dair bir soru var

    • Rust ile C birlikte çalışabilirliği konusunda net bir anlayış eksikliği var
    • C++ ve Objective C'de header dosyalarını dahil edip fonksiyonları çağırmak yeterli
    • Swift, Objective C dosyalarını dahil edip C'yi çağırabiliyor
    • Rust'ın kernel geliştiricilerine uymaya çalışmasındansa, dilin kendisinin biraz daha esnek hale gelmesi gerekiyor
  • Rust API'sinin C API'sini sarmalayıp sarmalamadığı ya da yeniden uygulayıp uygulamadığı net değil

    • Yeniden uygulamaysa, C API ile aynı adların kullanılması sorun çıkarabilir
  • Rust'ı kernel'e eklemek ek karmaşıklık yaratıyor

    • Yeni bir OS sıfırdan yazılırsa dilin tüm özellikleri kullanılabilir
    • Mevcut büyük bir kod tabanına eklendiğinde ek sorunlar ortaya çıkar
  • Tartışma oldukça medeni

    • Olumsuz tona katılmıyorum
    • İlgili kişilerin sorunları açıkça aktarmış olması konusunda iyimserim
  • Linux kernel'inde daha fazla seçeneğin olması her zaman faydalı

    • Rust her sorunun çözümü değil
    • Rust güvenli bir programlama modeli sunuyor ama sınırlı
    • Bellek sorunu mu? Rust kullan!
    • Eşzamanlılık sorunu mu? Rust'a geç!
    • Ama unsafe blokları kullanmadan C'nin yaptığı her şeyi yapmak mümkün değil
    • Rust yeni bir bakış açısı sunabilir ama tam bir çözüm değil
  • lwn.net sayfasının altındaki bazı yorumlar kaba

    • Açık kaynak projelerine katkıda bulunan birine "bilim bir cenazeyle ilerler" diye yorum yapıldığını hayal edin
  • C API ile Rust API arasındaki isim uyumsuzluğu meselesi üzerine tartışma

    • Eski adlandırma kurallarının zorlukları
    • Aynı adları korumak ya da yeni adlarla sarmak mümkün
    • İsim vermek zor bir iş