Statik ve Dinamik Dağıtım
Ödünleşimler
Statik ve Dinamik Dağıtım, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 3. 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 4 dersten oluşur.
Dağıtımın İki Yolu
Bir özellik yöntemini çağırdığınızda Rust, hangi somut uygulamanın çalışacağına karar vermelidir. İki strateji vardır: statik dağıtım (derleme zamanında belirlenir) ve dinamik dağıtım (çalışma zamanında belirlenir).
Jeneriklerle Statik Dağıtım
Jenerik işlevler statik dağıtım kullanır. Derleyici her somut tür için özelleştirilmiş bir kopya oluşturur; bu işleme tek biçimlendirme denir.
trait Area { fn area(&self) -> f64; }
struct Square { s: f64 }
impl Area for Square { fn area(&self) -> f64 { self.s * self.s } }
fn print_area<T: Area>(shape: &T) {
println!("{}", shape.area());
}
fn main() {
print_area(&Square { s: 4.0 });
}Tek Biçimlendirme
Çağırdığınız her tür için derleyici işlevin özel bir sürümünü üretir. Yöntem çağrısı arama yapılmadan doğrudan çağrıya dönüşür; bu nedenle elle yazılmış kod kadar hızlıdır.
dyn ile Dinamik Dağıtım
Özellik nesneleri dinamik dağıtım kullanır. Tek bir işlev tüm türleri ele alır; yöntemin adresi çalışma zamanında vtable aracılığıyla bulunur.
trait Area { fn area(&self) -> f64; }
struct Square { s: f64 }
impl Area for Square { fn area(&self) -> f64 { self.s * self.s } }
fn print_area(shape: &dyn Area) {
println!("{}", shape.area());
}
fn main() {
print_area(&Square { s: 4.0 });
}vtable
Bir özellik nesnesi şişman işaretçidir: bir bölümü veriyi, diğer bölümü yöntem adreslerini listeleyen bir vtable'ı gösterir. Her çağrı bu tablodaki bir girdiye erişir.
Bu ek dolaylı erişim, çalışma zamanı maliyetidir.
Hız Tercihi
Statik dağıtım çağrı başına daha hızlıdır ve satır içine alınabilir; ancak daha fazla makine kodu üretir. Dinamik dağıtım küçük bir dolaylı erişim ekler, fakat kod boyutunu küçük tutar.
Çoğu uygulamada fark önemsizdir; seçiminizi esnekliğe göre yapın.
Kod Boyutu Tercihi
Bir jenerik işlevi birçok türle çağırmak, ikili dosyayı şişirebilecek çok sayıda kopya oluşturur. Tek bir dyn işlevi bu tekrarı önler.
Kütüphanelerin bazen iç kısımda özellik nesnelerini tercih etmesinin nedeni budur.
Esneklik Tercihi
Jenerikler her çağrı noktasında tek bir somut tür zorunlu kılar; bu nedenle koleksiyonda karışık türleri tutamazlar. Özellik nesneleri bunu yapabilir. Farklı türlerden oluşan bir listeye ihtiyacınız varsa yanıt dinamik dağıtımdır.
trait Area { fn area(&self) -> f64; }
struct Square { s: f64 }
struct Rect { w: f64, h: f64 }
impl Area for Square { fn area(&self) -> f64 { self.s * self.s } }
impl Area for Rect { fn area(&self) -> f64 { self.w * self.h } }
fn main() {
let shapes: Vec<Box<dyn Area>> = vec![Box::new(Square { s: 2.0 }), Box::new(Rect { w: 3.0, h: 4.0 })];
let total: f64 = shapes.iter().map(|s| s.area()).sum();
println!("{}", total);
}İkisini Birlikte Kullanma
İkisini birleştirebilirsiniz: jenerik bir işlev sınırda impl Trait kabul edip değerleri iç kısımda Box<dyn Trait> olarak saklayabilir. Her birini uygun olduğu yerde kullanın.
Karar Rehberi
Hızlı kurallar:
- Çağrı başına tek tür ve yoğun kullanılan yol mu? Jenerikleri (statik) kullanın.
- Koleksiyonda karışık türler mi var?
dyn(dinamik) kullanın. - İkili dosya boyutundan mı endişelisiniz?
dyn'i tercih edin.
Önemli Noktalarda İkisi de Sıfır Maliyetlidir
Rust, istemediğiniz ek yükü asla eklemez. Jeneriklerin çalışma zamanında maliyeti yoktur; özellik nesnelerinin maliyeti yalnızca bir işaretçi üzerinden dolaylı erişimdir. Tercihi açıkça siz yaparsınız.
Hızlı Kontrol
Dağıtım bilginizi sınayın.
Özet
İki dağıtım biçimini karşılaştırdınız:
- Statik (jenerikler): tek biçimlendirilmiş, hızlı, daha büyük ikili dosya, çağrı başına tek tür
- Dinamik (
dyn): vtable araması, esnek, daha küçük kod, karışık koleksiyonlara izin verir - Esneklik, performans ve ikili dosya boyutu gereksinimlerinize göre seçim yapın
Sıkça Sorulan Sorular
“Statik ve Dinamik Dağıtım” dersi ücretsiz mi?
Evet — “Statik ve Dinamik Dağıtım” 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 4 dersten oluşur.
“Statik ve Dinamik Dağıtım” dersinde ne öğreneceğim?
Ödünleşimler 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, 4 dersinin 3. dersidir.
“Statik ve Dinamik Dağıtım” 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
- Özellik Tanımlama
- Özellik Nesneleri ve dyn
- Statik ve Dinamik Dağıtım
- Varsayılan Yöntemler