Bellek yönetimi
Otomatik Bellek Yönetimi > Çöp Toplama (Garbage Collection) > Sahiplik (Ownership)

Sahiplik Rust programlama dilinin tasarımında benimsenen bir bellek yönetimi tekniğidir. Bu teknik çalışma zamanında çöp toplama amacıyla ek bellek ayak izi oluşturmaz, deterministik çalışır ve manuel bellek yönetimine ek olarak bir performans yükü yoktur. Manuel bellek yönetimi ile tamamen aynı çalışma zamanı maliyetine sahiptir.
Sahiplik kuralları derleyici tarafından kontrol edilir ve yönetilir. Bu da bellek yönetimi kurallarının ihlal edilmesi sonucunda derleyici tarafından hata belgelenmesine yol açacaktır. Bu sayede manuel bellek yönetiminde yazılım geliştirici tarafından yapılabilecek bellek yönetimi hatalarının engellenmesi ve tekniğin olumlu yönlerini korurken olumsuz yönlerinin ortaya çıkmasının engellenmesi amaçlanmaktadır.
Sahipliğin kuralları;
Bir tahsisin her zaman bir sahibi olmalıdır.
Bir tahsisin yalnızca tek bir sahibi olabilir.
Sahibi olmayan bir tahsis kapsam (scope) dışına çıktığında serbest bırakılır.
Bu kuralları irdelemek gerekirse en önemli temel kural bir tahsisin her zaman bir sahibinin olması gerektiğidir. Bu kural sahiplik yaklaşımın kök kuralıdır. Sahibi olan bir tahsis farklı bir sahibe atandığında önceki sahip sahipliğini kaybeder zira aynı anda yalnızca tek bir sahip olma kuralı vardır.
Derleyicinin hata belgeleyeceği yerlerden birisi sahipliğin yanlış kullanımıdır. Sahipliğini kaybetmiş bir değişkeni kullanmak açıkça derleme hatasına neden olacaktır. Bu derleme zamanında gerçekleştirilen bir bellek güvenliği yaklaşımıdır.
Sahiplik tekniği bu noktaya kadar C programlama dilinde yapılan manuel bellek yönetiminden çok farklı değildir. Bir tahsis gerçekleştirildi ve yazılım geliştirici bir işaretçi ile bu tahsisin konumuna sahiptir, bu işaretçiyi farklı bir işaretçiye atayabilir ve bu bir sorun teşkil etmez. C ile geliştirilmiş bir programın tahsisin ne zaman boşaltılacağını anlamak gibi bir amacı yoktur. Bu nedenle yazılım geliştirici serbest bırakana kadar istediği gibi kullanmakta özgürdür lakin sonrasında yapılan bellek yönetimi hataları sonucunda çeşitli bellek sorunları ile karşılaşılabilir.
Rust, C programlama dilinin aksine derleme zamanında tahsisin nerede gerçekleşeceğini bilmek ister. Bunun için yalnızca tek bir sahip olmalıdır. O sahip izlenebilir ve yok edildiği durumda tahsisin serbest bırakılması gerektiği anlaşılmış olur. Tam olarak bu nedenden bir tahsisin tek sahibi vardır.
Sahipliği elinde tutan bir örnek yok edildiğinde, eğer halen elinde bulunduruyorsa doğal olarak başka bir noktada farklı bir sahip olamayacağından tahsisin serbest bırakılması gerçekleşir. Bu yaklaşım manuel bellek yönetiminin güvenli bir şekilde gerçekleştirilmiş olması için derleme zamanında (compile time) teşvik edilen bir türevi olarak düşünülebilir.
fn main() {
    let a = String::from("Merhaba sahiplik!");
    let b = a; // a artık kullanılamaz zira a'nın tahsisinin sahibi b'dir.
    let c = b; // b artık kullanılamaz zira b'nın tahsisinin sahibi c'dir.
    let d = c; // c artık kullanılamaz zira c'nın tahsisinin sahibi d'dir.
    println!("{}", d); // "Merhaba sahiplik!" yazar.
} // kapsam sonunda d yok edileceğinden, sahip olduğu tahsis serbest bırakılır.