0Pricing
Learn Rust Coding · Ders

Box, Rc ve Arc Akıllı İşaretçileri

Verileri yöneten yığın alanı ayırma için `Box`, paylaşılan sahiplik için `Rc` ve iş parçacığı güvenli paylaşılan sahiplik için `Arc` yapılarını anlayın.

Box, Rc ve Arc Akıllı İşaretçileri, 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.

Akıllı İşaretçiler Nedir?

Rust'ın sahiplik sistemi bellek güvenliği açısından harikadır, ancak bazen daha fazla esnekliğe ihtiyaç duyarsınız. İşte bu noktada akıllı işaretçiler devreye girer!

Akıllı işaretçiler, işaretçiler gibi davranan ancak ek üstverilere ve yeteneklere de sahip veri yapılarıdır. Belleği, sahipliği ve diğer kaynakları otomatik olarak yönetirler.

Box: Verileri Öbekte Depolama

En basit akıllı işaretçi Box<T>'dir. Verileri yığın yerine öbekte depolamanızı sağlar.

  • Yığın: Hızlı, sabit boyutlu veriler.
  • Öbek: Daha yavaş, esnek boyutlu ve çalışma zamanında ayrılan veriler.

Bir değeri Box içine koyduğunuzda Box'un kendisi yığında bulunur, ancak işaret ettiği veri öbekte yaşar.

Öbek Ayırma için Box Kullanımı

Box'un verileri öbeğe nasıl taşıdığını görelim. Bu, büyük veriler için veya derleme zamanında boyutu bilmediğiniz durumlarda kullanışlıdır.

Bir değerin kutuya alındığını gözlemlemek için bu kodu çalıştırın.

fn main() {
  let x = 5; // x is on the stack
  let boxed_x = Box::new(x); // x's value is moved to the heap, boxed_x is on stack
  println!("Value on stack: {}", x);
  println!("Value in Box (on heap): {}", *boxed_x); // Dereference to get value
}

Box Ne Zaman Kullanışlıdır?

Box<T>'yi şu durumlarda kullanabilirsiniz:

  • Boyutu derleme zamanında bilinemeyen ve bilinen, sabit boyutlu bir yerde depolanması gereken bir türünüz olduğunda.
  • Büyük miktarda veriniz olduğunda ve verinin kendisini kopyalamadan sahipliği aktarmak istediğinizde.
  • Bir trait nesnesine sahip olmak istediğinizde (örneğin Box<dyn Trait>).

Rc: Birden Çok Sahip (Tek İş Parçacığı)

Rust'ın sahiplik kuralları, bir değerin genellikle yalnızca bir sahibi olduğu anlamına gelir. Peki programınızın birden çok bölümü aynı verinin "sahibi" olmak isterse ne olur?

Rc<T> veya başvuru sayımlı yapı, tek iş parçacıklı bir senaryoda verinin birden çok sahibi olmasına olanak tanır. Veriye kaç başvurunun işaret ettiğini takip eder.

Sayı sıfıra düştüğünde veri temizlenir.

Rc ile Veri Paylaşma

Rc::clone() başvuru sayısını artırır. Bu, derin bir kopya değildir; yalnızca aynı veriye işaret eden başka bir işaretçi oluşturur.

Verilerin nasıl paylaşıldığına ve değerine farklı "sahiplerden" nasıl erişilebildiğine dikkat edin.

use std::rc::Rc;

fn main() {
  let value = Rc::new(String::from("Shared String"));
  println!("Count after creation: {}", Rc::strong_count(&value));

  let value_clone_a = Rc::clone(&value); // Increment count
  println!("Count after clone A: {}", Rc::strong_count(&value));

  {
    let value_clone_b = Rc::clone(&value); // Increment count
    println!("Count after clone B: {}", Rc::strong_count(&value));
    println!("Data from A: {}", value_clone_a);
    println!("Data from B: {}", value_clone_b);
  } // value_clone_b goes out of scope, count decreases

  println!("Count after B goes out of scope: {}", Rc::strong_count(&value));
}

Arc: Paylaşılan Sahiplik (Çok İş Parçacığı)

Rc<T>, tek iş parçacıklı uygulamalarda iyi çalışır. Ancak verileri birden çok iş parçacığı arasında paylaşmanız gerekiyorsa Rc<T> güvenli değildir.

Arc<T> veya atomik başvuru sayımlı yapı, Rc<T>'nin iş parçacığı güvenli sürümüdür. Başvuru sayısını güncellemek için atomik işlemler kullanır ve iş parçacıkları arasında güvenliği sağlar.

Atomik işlemler nedeniyle Arc, Rc'ye kıyasla biraz daha fazla işlem yüküne sahiptir.

Arc ile İş Parçacıkları Arasında Veri Paylaşma

Bu örnek, Arc'ın birden çok iş parçacığının aynı paylaşılan verilere güvenli bir şekilde erişip bunları okumasını nasıl sağladığını gösterir. Her iş parçacığı kendi `Arc` kopyasını alır.

Ana iş parçacığı, oluşturulan tüm iş parçacıklarının tamamlanmasını bekler.

use std::sync::Arc;
use std::thread;

fn main() {
  let data = Arc::new(vec![1, 2, 3, 4, 5]);
  let mut handles = vec![];

  for i in 0..3 {
    let data_clone = Arc::clone(&data); // Clone Arc for each thread
    let handle = thread::spawn(move || {
      println!("Thread {} has data: {:?}", i, *data_clone);
    });
    handles.push(handle);
  }

  for handle in handles {
    handle.join().unwrap();
  }
  println!("All threads finished.");
}

Box, Rc veya Arc?

Doğru akıllı işaretçiyi seçmek ihtiyaçlarınıza bağlıdır:

  • Box<T>: Verileri öbeğe koymanız gerektiğinde; genellikle tek sahiplik için veya özyinelemeli türlerle çalışırken.
  • Rc<T>: Tek iş parçacıklı bir bağlamda veri için birden çok sahibe ihtiyaç duyduğunuzda.
  • Arc<T>: Çok iş parçacıklı (eşzamanlı) bir bağlamda veri için birden çok sahibe ihtiyaç duyduğunuzda.

İş parçacığı güvenliğine ihtiyacınız yoksa her zaman Box veya Rc'yi tercih edin; çünkü Arc'ın bir işlem maliyeti vardır.

Akıllı İşaretçi Kontrolü

Büyük bir görüntü dosyasını öbekte depolamanız gerekiyor ve programınızın yalnızca bir bölümü bu dosyanın sahibi olup onu yönetecek. Hangi akıllı işaretçiyi kullanmalısınız?

Özet: Akıllı İşaretçiler

Bu derste üç temel Rust akıllı işaretçisi öğrendiniz:

  • Box<T>: Tek sahiplikle verileri öbekte ayırmak için.
  • Rc<T>: Tek iş parçacıklı bir ortamda verilerin birden çok sahibi olmasını sağlamak için.
  • Arc<T>: Çok iş parçacıklı bir ortamda verilerin birden çok, iş parçacığı güvenli sahibinin olmasını sağlamak için.

Bu akıllı işaretçiler, Rust'ın güvenlik garantilerinden yararlanmaya devam ederken bellek yönetimi üzerinde daha fazla kontrol sahibi olmanızı sağlar.

Sıkça Sorulan Sorular

“Box, Rc ve Arc Akıllı İşaretçileri” dersi ücretsiz mi?

Evet — “Box, Rc ve Arc Akıllı İşaretçileri” 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.

“Box, Rc ve Arc Akıllı İşaretçileri” dersinde ne öğreneceğim?

Verileri yöneten yığın alanı ayırma için `Box`, paylaşılan sahiplik için `Rc` ve iş parçacığı güvenli paylaşılan sahiplik için `Arc` yapılarını anlayın. 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.

“Box, Rc ve Arc Akıllı İşaretçileri” 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

  1. Box, Rc ve Arc Akıllı İşaretçileri
  2. İç Değiştirilebilirlik: RefCell, Cell
  3. İş Parçacıklarıyla Korkusuz Eşzamanlılık
← Learn Rust Coding Sayfasına Dön