21 puan yazan tsboard 2024-07-24 | 5 yorum | WhatsApp'ta paylaş

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

 
ranolp 2024-07-28

Hata işleme konusunda, kütüphanelerde snafu/thiserror, uygulamalarda ise eyre/anyhow kurup kullanmak işleri kolaylaştırıyor.

 
y15un 2024-07-26

Kütüphane yazarlarının zorlukları: [..snip..] Her bağımlılık eklediğinizde, her fonksiyonun hata türünü sarmalayıcı hata türüne ekleme işi özellikle can sıkıcıdır.

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 seferinde impl From<ExtError> for Error yazarken “bıktım artık” diye düşündüğüm bir iki sefer olmadı...

 
eususu 2024-07-26

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~

 
undercat 2024-07-25

Güzel yazı için teşekkürler!

 
tsboard 2024-07-24

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 build ile 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.targetDir ayarı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.