Çözüldü Rust kodu neden calisiyor?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
26 Ocak 2020
Mesajlar
6.332
Makaleler
1
Çözümler
13
Yer
İstanbul
Kod:
fn main() {
 let mut x: String = String::from("Ali");
 let y = &x;
 let z = &x;
 println!("{}, {}", y, z);
 println!("{}, {}", y, z);
 let q = &mut x;
}

Y ve Z immutable fakat Q mutable. Ucu de ayni scope icerisinde fakat bunun yasak olmasi gerekmiyor muydu? Ilk once println! Kullaninca Y ve Z drop mu ediliyor diye düşündüm fakat ikinci kez fonksiyonu cagirabildigime gore drop edilmiyor ve Y ve Z hala gecerli Q varken. Nasil oluyor bu?
 
Çözüm
Kod:
fn main() {
 let mut x: String = String::from("Ali");
 let y = &x;
 let z = &x;
 println!("{}, {}", y, z);
 println!("{}, {}", y, z);
 let q = &mut x;
}

Y ve Z immutable fakat Q mutable. Ucu de ayni scope icerisinde fakat bunun yasak olmasi gerekmiyor muydu? Ilk once println! Kullaninca Y ve Z drop mu ediliyor diye düşündüm fakat ikinci kez fonksiyonu cagirabildigime gore drop edilmiyor ve Y ve Z hala gecerli Q varken. Nasil oluyor bu?

Macro'da kullandigindan sonra derleyici y ve z'yi daha sonra tekrar kullanmayacagini dusundugunden, immutable referanslari saliyor. Kullanirsan y ve z'yi, q'nun tanimindan sonra, q hata verir. Mesela soyle yapsaydin hata alacaktin;
Kod:
fn main() {
    let mut x = String::from("Hello, world!");
    let y = &x;
    let z = &x;
    println!("y: {}, z: {}", y, z);
    let q = &mut x;
    q.push_str(" How are you?");
    println!("y: {}, q: {}", y, q);
}

Hata mesaji;
Screenshot 2025-01-24 at 1.16.26 AM.png
Kod:
fn main() {
 let mut x: String = String::from("Ali");
 let y = &x;
 let z = &x;
 println!("{}, {}", y, z);
 println!("{}, {}", y, z);
 let q = &mut x;
}

Y ve Z immutable fakat Q mutable. Ucu de ayni scope icerisinde fakat bunun yasak olmasi gerekmiyor muydu? Ilk once println! Kullaninca Y ve Z drop mu ediliyor diye düşündüm fakat ikinci kez fonksiyonu cagirabildigime gore drop edilmiyor ve Y ve Z hala gecerli Q varken. Nasil oluyor bu?

Macro'da kullandigindan sonra derleyici y ve z'yi daha sonra tekrar kullanmayacagini dusundugunden, immutable referanslari saliyor. Kullanirsan y ve z'yi, q'nun tanimindan sonra, q hata verir. Mesela soyle yapsaydin hata alacaktin;
Kod:
fn main() {
    let mut x = String::from("Hello, world!");
    let y = &x;
    let z = &x;
    println!("y: {}, z: {}", y, z);
    let q = &mut x;
    q.push_str(" How are you?");
    println!("y: {}, q: {}", y, q);
}

Hata mesaji;
Screenshot 2025-01-24 at 1.16.26 AM.png
 
Çözüm
Macro'da kullandigindan sonra derleyici y ve z'yi daha sonra tekrar kullanmayacagini dusundugunden, immutable referanslari saliyor. Kullanirsan y ve z'yi, q'nun tanimindan sonra, q hata verir. Mesela soyle yapsaydin hata alacaktin;
Kod:
fn main() {
    let mut x = String::from("Hello, world!");
    let y = &x;
    let z = &x;
    println!("y: {}, z: {}", y, z);
    let q = &mut x;
    q.push_str(" How are you?");
    println!("y: {}, q: {}", y, q);
}

Hata mesaji;
Eki Görüntüle 2405842
Yani derleyicinin yazan kişiyi daha ozgur kılmak icin yaptığı mantığa dayalı birşey. Teşekkürler.
 

Technopat Haberler

Geri
Yukarı