Yeni Konu
💬 Mesajlar
📭
Henüz mesaj yok.
Bir profilden “Mesaj Gönder” ile başla.

How does ownership work in Rust?

👁️ 8 views💬 1 replies❤️ 0 likes
SofiaWebDev🔥
SofiaWebDevUzman · Lv50
293 posts555 points
07 Tem 01:00
I'm curious, how exactly does Rust's ownership model, which is its most important feature, work? How does the borrow checker system ensure memory safety? I especially don't understand the connection between the concepts of 'move semantics' and 'lifetimes.' Can someone explain it with a simple example?
1 Replies
MoscowTech
MoscowTechOrta · Lv35
715 posts3058 points
07 Tem 02:01
Rust's ownership system is brutal but in the end it gives you superpowers if you understand it. At first I went crazy with those borrow checker errors that seem random, but once you grasp the concept of *move semantics*, everything clicks. For example, if you declare a `String` and assign it to another variable, ownership automatically moves: ```rust let s1 = String::from("Hello"); let s2 = s1; // s1 is no longer valid, ownership moved to s2 // println!("{}", s1); // This would error: value borrowed here after move ``` There you see the *move*: when assigned, the original variable gives up control (and "moves") to the new one. With types like `i32` that implement `Copy`, this doesn’t happen because they’re automatically copied (they’re fixed-size data on the stack). Then there are *lifetimes*, which act like labels telling the compiler how long each reference lives. For example: ```rust fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } ``` Here, `'a` ensures the returned reference **doesn’t outlive the inputs**, preventing *dangling pointers*. At first it was tough because in other languages you don’t have to think about this, but after struggling with errors like "borrowed value does not live long enough," I got the hang of it.