Learn Rust Coding · Ders

Güvensiz Rust ile Etkileşim

Rust'ın güvenlik denetimlerini aşmak, FFI ve düşük seviyeli bellek işlemlerini etkinleştirmek için `unsafe` bloklarının ne zaman ve nasıl kullanılacağını anlayın.

3. ders / 311 adım

Güvensiz Rust ile Etkileşim, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 3 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 3 dersten oluşur.

Güvensiz Rust: Giriş

Güvensiz Rust'a hoş geldiniz! Rust bellek güvenliği garantileriyle ünlü olsa da bazı özel durumlarda bu denetimlerin bir kısmını devre dışı bırakmanız gerekebilir.

Rust'taki unsafe anahtar sözcüğü tam olarak bunu yapmanızı sağlar. Bu, 'kötü' kod yazmanın bir yolu değil, bellek veya donanım üzerinde daha doğrudan denetime ihtiyaç duyduğunuz gelişmiş kullanım alanları için bir araçtır.

Güvensizliğin Beş Özel Yetkisi

Bir unsafe bloğu kullandığınızda, Rust derleyicisinin normalde engellediği beş özel işleme erişim kazanırsınız:

  • Ham işaretçilerin başvurusunu kaldırma: Bellek adreslerine doğrudan erişme.
  • unsafe işlevleri veya yöntemleri çağırma: Derleyicinin doğrulayamadığı ön koşullara sahip işlevleri çalıştırma.
  • unsafe özellikleri uygulama: Türünüzün belirli değişmezleri koruduğunu bildirme.
  • Değiştirilebilir statik değişkenlere erişme veya bunları değiştirme: Veri yarışları riskiyle küresel olarak paylaşılabilir durumu kullanma.
  • union alanlarına erişme: Geçerli veri için geçersiz bir tür olabilecek bir birlikten okuma.

Ham İşaretçilerin Başvurusunu Kaldırma

Ham işaretçiler, Rust'ın olağan güvenlik garantileri olmadan bellek adreslerini temsil eder. Bunları başvurulardan (&T, &mut T) oluşturabilirsiniz, ancak başvurularını kaldırmak için bir unsafe bloğu gerekir.

Bu, işaretçinin geçerli olmasını ve ayrılmış belleği göstermesini sağlamaktan programcı olarak sizin sorumlu olduğunuz anlamına gelir.

fn main() {
  let mut num = 5;
  let r1 = &num as *const i32; // Immutable raw pointer
  let r2 = &mut num as *mut i32; // Mutable raw pointer

  unsafe { // The `unsafe` block starts here
    println!("r1 points to: {}", *r1);
    *r2 = 10; // Modify data through mutable raw pointer
    println!("r2 points to: {}", *r2);
  } // The `unsafe` block ends here

  println!("Num is now: {}", num);
}

Güvensiz İşlevleri Çağırma

Bazı işlevler unsafe fn olarak işaretlenir. Bu, işlevin Rust derleyicisinin garanti edemediği ön koşullara sahip olduğu anlamına gelir. Örneğin bir işlev geçerli bir bellek adresi bekleyebilir, ancak bunu doğrulayamaz.

Bu tür işlevleri çağırma işlemi bir unsafe bloğuna sarılmalıdır; bu, çağıran kişi olarak tüm ön koşulların karşılandığını sizin sağladığınızı belirtir.

unsafe fn dangerous_operation() {
  println!("This operation could be dangerous if preconditions aren't met!");
}

fn main() {
  println!("Attempting a dangerous operation...");
  unsafe { // Calling an unsafe function requires `unsafe`
    dangerous_operation();
  }
  println!("Operation completed.");
}

Değiştirilebilir Statik Değişkenler

Rust, veri yarışlarını önlemek için küresel değiştirilebilir durumu varsayılan olarak engeller. Ancak static mut kullanarak değiştirilebilir statik değişkenler tanımlayabilirsiniz.

Birden çok iş parçacığı bu değişkenlere aynı anda erişmeye çalışabileceği ve bu da tanımsız davranışa yol açabileceği için bu değişkenlere erişmek veya onları değiştirmek unsafe kabul edilir. Uygun eşzamanlamayı sağlamak sizin sorumluluğunuzdur.

static mut COUNTER: i32 = 0; // A mutable static variable

fn add_to_counter(inc: i32) {
  unsafe { // Modifying `static mut` requires `unsafe`
    COUNTER += inc;
  }
}

fn main() {
  add_to_counter(5);
  unsafe { // Reading `static mut` also requires `unsafe`
    println!("COUNTER after first add: {}", COUNTER);
  }

  add_to_counter(10);
  unsafe {
    println!("COUNTER after second add: {}", COUNTER);
  }
}

Güvensiz Özellikleri Uygulama

Rust'taki bazı özellikler unsafe trait olarak işaretlenir. Bu, bunları uygularken derleyicinin denetleyemediği belirli değişmezlerin korunması gerektiğini belirtir.

Yaygın bir örnek, iş parçacığı güvenliğiyle ilişkili olan Send ve Sync özellikleridir. Bir unsafe trait özelliğini el ile uygularsanız unsafe impl Trait for Type kullanmalı ve güvenlik özelliklerini garanti etmelisiniz.

Yeni başlayanların çoğu bununla daha seyrek karşılaşır; çünkü Rust bunları genellikle otomatik olarak veya güvenli soyutlamalar aracılığıyla yönetir.

Birlik Alanlarına Erişme

union, herhangi bir anda varyantlarından *birinin* değerini tutabilen, ancak tüm varyantları aynı bellek konumunu paylaşan özel bir türdür. C birliklerine benzer.

Bir union alanına erişmek için unsafe bloğu gerekir; çünkü derleyici o anda hangi alanın etkin olduğunu bilemez. Etkin olmayan bir alandan okumak tanımsız davranışa veya verilerin yanlış yorumlanmasına yol açabilir.

union Data {
  integer: u32,
  float: f32,
}

fn main() {
  let mut d = Data { integer: 42 }; // Initialize with an integer

  unsafe {
    // Accessing 'integer' is safe here
    println!("Integer value: {}", d.integer);

    // Accessing 'float' is unsafe, as 'integer' was initialized.
    // This would interpret the integer's bits as a float.
    // println!("Float value (unsafe): {}", d.float);
  }

  d.float = 3.14; // Now initialize with a float
  unsafe {
    // Accessing 'float' is safe now
    println!("Float value: {}", d.float);
  }
}

Pratik Güvensiz Kullanım Alanları

unsafe tasarruflu kullanılmalı olsa da çeşitli gelişmiş programlama görevleri için kritik öneme sahiptir:

  • Yabancı İşlev Arayüzü (FFI): Diğer dillerde yazılmış kodlarla (C/C++ kitaplıkları gibi) etkileşim kurma.
  • Performans iyileştirmeleri: Bazen Rust'ın denetimlerini atlamak, kritik bölümlerde küçük performans kazanımları sağlayabilir (ancak önce ölçüm yapın!).
  • Düşük düzey sistem programlama: İşletim sistemleri, aygıt sürücüleri veya gömülü sistemler yazma.
  • Güvenli soyutlamalar oluşturma: Güvensiz ilkellerin üzerine güvenli veri yapıları veya API'ler uygulama (ör. Vec'in oluşturulma şekli).

Güvensiz Kullanımda Sorumluluğunuz

unsafe kullandığınızda Rust'ın güvenlik garantilerini el ile koruma sorumluluğunu üstlenirsiniz. Bu şu anlama gelir:

  • Belleğin geçerli ve doğru hizalanmış olduğundan emin olma.
  • Paylaşılan değiştirilebilir durumla çalışırken veri yarışlarını önleme.
  • Sarkan işaretçilerden veya serbest bırakma sonrasında kullanımdan kaynaklanan hatalardan kaçınma.
  • Tüm işlev ön koşullarının karşılandığından emin olma.

unsafe'i yanlış kullanmak, en kötü türden hata olan ve hata ayıklaması çok zor olabilen tanımsız davranışa yol açabilir.

Güvensizlik Bilgisi Kontrolü

Aşağıdaki işlemlerden hangisi Rust'ta bir unsafe bloğu gerektirir?

Özet: Güvensiz Rust

Belirli, gelişmiş durumlarda Rust'ın derleme zamanı güvenlik denetimlerinin bir kısmını atlamanızı sağlayan güçlü bir özellik olan Güvensiz Rust hakkında bilgi edindiniz.

unsafe'in ödünç denetleyicisini tamamen devre dışı bırakmadığını, bunun yerine bellek güvenliği ve değişmezlerle ilgili sorumluluğu tamamen size, programcıya, devrettiğini unutmayın. Genellikle FFI, düşük düzey optimizasyonlar veya güvenli soyutlamalar oluşturmak için dikkatli ve son derece temkinli biçimde kullanın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Rust öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
39
Dersler
144

Sıkça Sorulan Sorular

“Güvensiz Rust ile Etkileşim” dersi ücretsiz mi?

Evet — “Güvensiz Rust ile Etkileşim” 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.

“Güvensiz Rust ile Etkileşim” dersinde ne öğreneceğim?

Rust'ın güvenlik denetimlerini aşmak, FFI ve düşük seviyeli bellek işlemlerini etkinleştirmek için `unsafe` bloklarının ne zaman ve nasıl kullanılacağı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 3. dersidir.

“Güvensiz Rust ile Etkileşim” 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. Bildirimsel Makrolar (`macro_rules!`)
  2. Yordamsal Makrolar: Türetme, İşlev
  3. Güvensiz Rust ile Etkileşim
← Learn Rust Coding Sayfasına Dön