ProgramlamaBackend Geliştirici

Rust'ta farklı referans türlerini nasıl tanımlarsınız: değiştirilebilir ve değiştirilemez referanslar arasındaki farklar, özel kurallar ve ömür uzunluğu, ve farklı referans türlerini kabul eden fonksiyonların nasıl yazılacağı hakkında bilgi verin. Söz dizimi örnekleri verin ve referanslarla çalışırken sık yapılan tipik hatalardan bahsedin.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Rust'ta iki temel referans türü vardır:

  • Değiştirilemez referanslar (&T): yalnızca okuma erişimi sağlar.
  • Değiştirilebilir referanslar (&mut T): referans aldıkları değeri değiştirmeye izin verir.

Kurallar:

  • Aynı anda ya herhangi bir sayıda değiştirilemez referans, ya da yalnızca bir tane değiştirilebilir referans olabilir; aynı görünüm alanında karıştırılamazlar.
  • Referansların bir ömür uzunluğu (lifetime) vardır, bu derleme aşamasında analiz edilir.

Söz dizimi örnekleri:

fn read(val: &i32) { println!("{}", val); } fn write(val: &mut i32) { *val += 1; } let mut x = 5; read(&x); write(&mut x);

Çeldirici Soru

Soru: Bir işlevin farklı görünüm alanlarında tek bir değişken üzerine iki değiştirilebilir referans oluşturabilir miyiz?

Cevap: Hayır, referanslar farklı bloklarda oluşturulsa bile, borcun analiz edilmesiyle ilgili görünüm alanı tüm işlevi kapsar veya derleyici, referansların kesişmediğini kesin olarak kanıtlayamazsa, değişkeni kapsar. Bu sık sık derleme hatalarına yol açar:

let mut x = 10; let r1 = &mut x; { let r2 = &mut x; // hata! }

Konuyla ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri


Hikaye

Bir ayrıştırıcı geliştirirken, geliştirici okuma ve yazma optimizasyonu için aynı tampon üzerinde eşzamanlı olarak değiştirilebilir ve değiştirilemez bir referans saklamaya çalıştı. Sonuç olarak, kod derlenmedi ve "güvensiz" yöntemle kuralların "aşılması" sonucunda veri sızıntısı hataları ortaya çıktı.


Hikaye

Veri işleme projesinin başlangıcında, katılımcılardan biri iç içe görünen karmaşık kod için "reanalyze borrow checker" yapmadı. Sonuçta, kesişen referanslar yüzünden klasik "değiştirilebilir olarak ödünç alınamaz çünkü değiştirilemez olarak da ödünç alındı" hatası ortaya çıktı, kaynak kodunda sorunun yerini açıkça belirtmeden.


Hikaye

Çok iş parçacıklı kodda, paylaşılan verilere erişim için normal referanslar kullanıldı. Parallele iş parçacıklarında verileri değiştirme girişiminde bulunulduğunda, beklenmeyen derleme hataları ve gizli kod aracılığıyla borç kontrolünün aşılması sonucu veri yarışı sorunları oluştu.