Rust'ın Sahiplik Modelini Anlama
Sahipliğin temel kurallarını ve taşıma semantiğini kavrayın; bunların double-free gibi yaygın bellek hatalarını nasıl önlediğini öğrenin.
Rust'ın Sahiplik Modelini Anlama, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 3 dersten oluşur.
Rust Sahipliği Nedir?
Rust'ın sahiplik sistemi, programınızın belleği nasıl kullandığını yöneten bir kurallar bütünüdür. Bu, Rust'ın çöp toplayıcı olmadan bellek güvenliğini sağlamasına yardımcı olan temel bir kavramdır.
- Sarkık işaretçiler yoktur.
- Çift serbest bırakma hataları yoktur.
- Eşzamanlı kodda veri yarışları yoktur.
Rust bu kuralları derleme zamanında denetler!
Yığın ve Öbek Belleği
Programlar iki ana bellek alanı kullanır: yığın ve öbek.
- Yığın: Daha hızlıdır ve sabit boyutlu verileri (tam sayılar, boolean değerler ve boyutu bilinen türler gibi) tutar. Veriler sırayla eklenir ve çıkarılır.
- Öbek: Daha yavaştır ve değişken boyutlu verileri (
String,Vecgibi) tutar. Veriler bellek ayırıcısı tarafından istenir ve geri verilir.
Sahiplik, öncelikle öbekteki verileri yöneterek bunların güvenli şekilde kullanılmasını ve temizlenmesini sağlar.
Kural 1: Her Değerin Bir Sahibi Vardır
Sahipliğin ilk kuralı basittir: Rust'taki her değerin sahibi olarak adlandırılan bir değişkeni vardır.
Bunu bir kutunun üzerindeki etiket gibi düşünebilirsiniz. Aşağıdaki s değişkeni, "hello" metninin sahibidir.
fn main() {
let s = String::from("hello"); // s owns "hello"
println!("{}", s);
}Kural 2: Aynı Anda Yalnızca Bir Sahip
İkinci kural şudur: belirli bir anda bir değerin yalnızca bir sahibi olabilir. Bu, bellek sorunlarını önlemek için kritik öneme sahiptir.
Karmaşık bir değeri (öbekte yaşayan String gibi) bir değişkenden diğerine atadığınızda sahiplik kopyalanmaz, taşınır.
Sahiplik Aktarımı Uygulamada
s1 değerinin s2'ye atanmasıyla ne olduğunu görünüz. Kodu çalıştırmayı deneyiniz.
fn main() {
let s1 = String::from("Hello, CoddyKit!");
let s2 = s1; // Ownership of the String data moves from s1 to s2
// println!("{}", s1); // This line would cause a compile-time error!
println!("{}", s2);
}“Move” Anlambilimini Anlamak
let s2 = s1; işleminden sonra s1 artık geçerli kabul edilmez. Rust, s1'i yeniden kullanmanızı engeller.
- Buna taşıma denir. Yığındaki işaretçi, uzunluk ve kapasite kopyalanır; ancak öbekteki verinin kendisi kopyalanmaz.
s1hâlâ geçerli olsaydı, kapsam dışına çıktıklarında hems1hem des2aynı belleği serbest bırakmaya çalışırdı (çift serbest bırakma hatası).
Rust'ın sahiplik sistemi bunu derleme zamanında önler!
Sahiplik ve Fonksiyon Çağrıları
Bir değeri bir fonksiyona geçirmek, onu başka bir değişkene atamaya benzer: sahiplik fonksiyona taşınır.
Fonksiyon sona erdiğinde değerin sahibi olan fonksiyon parametresi kapsam dışına çıkar ve değer bırakılır.
Fonksiyon Sahipliği Gösterimi
String değerinin takes_ownership'e nasıl taşındığını ve ardından gives_ownership'ın yeni bir String döndürdüğünü gözlemleyiniz.
fn takes_ownership(some_string: String) {
println!("Inside takes_ownership: {}", some_string);
} // some_string goes out of scope and `drop` is called.
fn gives_ownership() -> String {
let some_string = String::from("returned string");
some_string // Ownership is moved out of the function
}
fn main() {
let s1 = String::from("hello");
takes_ownership(s1); // s1's value moves into takes_ownership
// println!("{}", s1); // Error: s1 is no longer valid here!
let s2 = gives_ownership(); // s2 gets ownership of the returned String
println!("After gives_ownership: {}", s2);
}Kural 3: Kapsam ve Bırakma
Son kural şudur: sahip kapsam dışına çıktığında değer bırakılır.
- Kapsam, bir öğenin geçerli olduğu program aralığıdır ve genellikle
{}küme parantezleriyle tanımlanır. - Bir değişken kapsam dışına çıktığında Rust,
dropadlı özel bir fonksiyonu otomatik olarak çağırır.
Bu, belleğin çöp toplayıcı olmadan otomatik ve güvenli şekilde temizlenmesini sağlar.
Bellek Hatalarını Önleme
Sahiplik kuralları, bellek güvenliğini garanti etmek için birlikte çalışır:
- Tek sahip: Kodunuzun birden fazla bölümünün aynı belleği serbest bırakmaya çalışmasını önler.
- Kapsam sonunda bırakma: Belleğin tam olarak bir kez ve doğru zamanda serbest bırakılmasını sağlar.
Bu, çift serbest bırakma ve serbest bırakılmış belleği kullanma gibi yaygın hataları derleme zamanında ortadan kaldırarak içinizin rahat olmasını sağlar!
Sahiplik Denetimi
Aşağıdaki Rust kodunu inceleyiniz. Derlemeyi ve çalıştırmayı denediğinizde ne olacaktır?
fn main() {
let message = String::from("Rust is fun!");
let greeting = message;
println!("{}", message);
}Özet: Sahipliğin Temelleri
Harika iş çıkardınız! Rust'ın sahiplik sisteminin temel kurallarını öğrendiniz:
- Her değerin bir sahibi vardır.
- Aynı anda yalnızca bir sahip olabilir.
- Sahip kapsam dışına çıktığında değer bırakılır.
Bu sistem, çöp toplayıcı olmadan yaygın bellek hatalarını önler. Sırada, sahipliği aktarmadan verileri paylaşmak için ödünç almayı inceleyeceğiz.
Sıkça Sorulan Sorular
“Rust'ın Sahiplik Modelini Anlama” dersi ücretsiz mi?
Evet — “Rust'ın Sahiplik Modelini Anlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 3 dersten oluşur.
“Rust'ın Sahiplik Modelini Anlama” dersinde ne öğreneceğim?
Sahipliğin temel kurallarını ve taşıma semantiğini kavrayın; bunların double-free gibi yaygın bellek hatalarını nasıl önlediğini öğrenin. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.
“Rust'ın Sahiplik Modelini Anlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Rust'ın Sahiplik Modelini Anlama
- Başvurular ve Ödünç Alma Açıklaması
- Güvenli Başvurular için Ömürler