Yaklaşık 10 yıldır Rust kullanıyorum ve bu dili gerçekten seviyorum. Ancak bazı hayal kırıklığı yaratan yönleri de var. Aşağıda bunların bir listesi yer alıyor.
1. Result<T, E> sorunu
Rust’ın hata işleme yaklaşımının açık ve zorunlu olması harika. Ancak pratikte kullanırken pek çok rahatsız edici yönü var.
- Kütüphane yazarları için zorluklar: Yeni hata türleri oluşturup dönüştürme süreci zahmetli. Her bağımlılık eklendiğinde, her fonksiyonun hata türünü sarmalayıcı hata türüne eklemek özellikle can sıkıcı.
- Uygulama kodundaki zahmet: Bir fonksiyonun neden başarısız olduğundan çok, hatayı üst seviyeye iletmek ve sonucu kullanıcıya göstermek önemlidir. Java’nın aksine Rust, iletim sürecinde backtrace sağlamadığı için sorunun kökenini anlamak zorlaşır.
2. Modül sisteminin esnekliği
Rust’ın modül sistemi o kadar esnek ki, bu durum bazen tersine kullanışsız hale geliyor.
- Aşırı esneklik: Türleri yeniden dışa aktarabilir veya erişim seviyelerini ayrıntılı biçimde ayarlayabilirsiniz; ancak bu, istemeden istenmeyen türlerin dışarı açılmasına yol açabilir.
- Orphan rule sorunu: Projeyi birden fazla crate’e bölmek tavsiye edilir, ancak orphan rule bazen engel olur.
3. Derleme süresi ve IDE araçları
Rust’ın derleme süresi ile IDE araçlarının hata kontrolü fazla yavaş.
- Uzun derleme süresi: Büyük projelerde tek bir fonksiyonu değiştirdiğinizde tüm crate yeniden derlenir ve bu oldukça verimsizdir.
- Yavaş IDE tepki süresi: Rust analyzer, sanki her yazışta projeyi baştan indeksliyormuş gibi hissettiriyor; bu da özellikle büyük projelerde sorun yaratıyor.
Sonuç
Rust benim en sevdiğim dil, ancak böyle hayal kırıklığı yaratan yönleri de var. Başka kullanıcıların da aynı sorunları yaşayıp yaşamadığını merak ediyorum.
5 yorum
Hata işleme konusunda, kütüphanelerde
snafu/thiserror, uygulamalarda iseeyre/anyhowkurup kullanmak işleri kolaylaştırıyor.Bu kısmı gerçekten iliklerime kadar hissediyorum. Crate’e özel bir hata
enumu oluşturup bağımlılıklardan gelen hata türleri için her seferindeimpl From<ExtError> for Erroryazarken “bıktım artık” diye düşündüğüm bir iki sefer olmadı...Sanırım henüz gerçekten başlayamadığım için, böyle bir hayal kırıklığını ben de yaşamak isterdim.
Güzel yazı için teşekkürler~
Güzel yazı için teşekkürler!
Uzun derleme süreleriyle ilgili olarak, aşağıdaki yorumun faydalı olabileceğini düşündüğüm için ekliyorum: (by pr4wl)
Rust analyzer her değişiklikte uzun bir yeniden derleme yapıyorsa, bunun nedeni büyük olasılıkla uygulamayı derlerken kullandığınız özelliklerin veya ortam değişkenlerinin farklı olmasıdır. Varsayılan olarak RA, derleme artifaktlarını depolamak için
cargo buildile aynı hedef dizini kullanır ve birbiriyle uyumlu olmayan derlemeler yaptığınızda sürekli tam derleme gerçekleştirmeye başlar.Bu sorun özellikle Bevy'de, derleme için
bevy/dynamic_linkingözelliğini kullanıp Rust analyzer için kullanmadığınız durumlarda sık görülebilir.En basit çözüm, RA'ya farklı bir hedef dizin kullanmasını söylemektir. Bununla ilgili ayrıntılar için
rust-analyzer.cargo.targetDirayarına bakabilirsiniz.Bir diğer çözüm ise, tüm özellikleri ve ortam değişkenlerini aynı olacak şekilde ayarlayarak birbirlerinin derleme artifaktlarını yeniden kullanabilmelerini sağlamaktır. Ancak bu zor olabilir.