Akıllı işaretçiler, normal işaretçilere göre ek avantajlara sahiptir. Rust'taki akıllı işaretçiler hakkında bilmeniz gereken her şey burada.

Bellek yönetimi, özellikle güvenlikten ödün verilmediği için Rust'ın satış noktalarından biridir. Rust'ın sahiplik sistemi, derleyicinin kod güvenliğini garanti etmesini ve sarkan işaretçiler ve bellek sızıntıları gibi bellek hatalarından kurtulmasını sağlar.

Rust ayrıca ek meta veriler ve geleneksel işaretçilerin ötesinde yetenekler içeren akıllı işaretçiler sağlar. Akıllı işaretçiler, bellek sızıntılarını gidermek için kullanışlıdır.

Rust'ta Akıllı İşaretçiler Nedir?

Akıllı işaretçiler Rust'ın veri türleri aşırı yüklenmiş operatörler, yıkıcılar ve otomatik bellek yönetimi gibi ek işlevler sunarak normal işaretçilerin yeteneklerini genişletir.

Rust, akıllı işaretçileri çalıştırmak için yapıları kullanır; bu nedenle, akıllı işaretçiler aynı zamanda sahiplik özelliklerine de sahiptir.

Dinamik olarak ayrılmış verileri içeren belleği akıllı işaretçilerle bağladığınızda, bunlar otomatik olarak yeniden dağıtılır. Akıllı işaretçiler, kontrol etmek için işlevsellik sağlar.

instagram viewer
Rust'ın nesne ömrü, C ve C++ gibi diğer düşük seviyeli dillerde popüler olan boş işaretçi başvurusunu kaldırma ve bellek sızıntıları gibi hataları önlemek için kullanışlı hale getirir.

Akıllı İşaretçileri Kullanmanın Faydaları

Akıllı işaretçiler kullanmanın bazı avantajları şunlardır:

  1. Otomatik Bellek Yönetimi: Akıllı işaretçiler, normal işaretçilerle manuel bellek yönetiminin aksine, ayırma ve serbest bırakma da dahil olmak üzere otomatik bellek yönetimi sağlar.
  2. Gelişmiş Güvenlik: Akıllı işaretçiler, sahiplik semantiğini zorlayarak, her seferinde yalnızca bir sahibin kaynaklara erişmesini sağlayarak veri izlerini ve eşzamanlılıkla ilgili hataları önler.
  3. Esneklik: Rust, birden çok akıllı işaretçi sağlar ve her biri kendi mülkiyet semantiği güvenli kodu esnek bir şekilde yazmak için.
  4. Kaynak yönetimi: Kaynakları kapsülleyerek dosya işleyicileri ve ağ soketleri gibi diğer kaynakları yönetmek için akıllı işaretçileri kullanabilirsiniz. yaşam döngülerini yönetmeyi kolaylaştıran ve sonrasında doğru şekilde kapatılıp serbest bırakıldıklarından emin olan akıllı bir işaretçi içinde kullanmak.
  5. Geliştirilmiş Performans: Akıllı işaretçiler, bellek kopyalama ve ayırma işlemlerini azaltarak performansı artırmaya yardımcı olur—akıllı işaretçiler kullanmaktan kaynaklanan azaltılmış bellek ayak izi, performansın artmasına neden olur.

Akıllı işaretçiler, özellikle bellek yönetiminin kritik olduğu durumlarda, orta ila büyük boyutlu uygulamalar için uygundur.

Akıllı İşaretçi Türleri

Rust, aşağıdakiler de dahil olmak üzere birden çok türde akıllı işaretçi sağlar: Kutu, RC, RefHücre, Ve muteks.

1. Kutu Akıllı İşaretçi

bu Kutu Akıllı İşaretçi, Rust'ın en basit ve en yaygın akıllı işaretçisidir. bu Kutu akıllı işaretçi, öbek üzerinde değerlerin tahsis edilmesine yardımcı olur ve erişilebilirlik için kutulu bir işaretçi oluşturur.

bu Kutu Akıllı İşaretçi, işaretçiler kapsam dışında olduğunda belleğin otomatik olarak yeniden konumlandırıldığından emin olmanız gerektiğinde dinamik bellek ayırma için kullanışlıdır.

Bir reklamı nasıl beyan edip kullanabileceğiniz aşağıda açıklanmıştır. Kutu Işaretçi:

fnana(){

// akıllı işaretçi kutusunun yeni örneği
izin vermek x = Kutu::yeni(5);
yazdır!(X)

}

bu Kutu type, Rust'ın başlangıcının bir parçasıdır, bu nedenle diğer akıllı işaretçilerin aksine türü içe aktarmanız gerekmez.

bu X değişken bir Kutu 5 tamsayı değerini gösteren işaretçi. Rust, yığındaki değer için belleği ayırır ve değişken kapsam dışında olduğunda otomatik olarak yeniden tahsis eder.

2. Rc Akıllı İşaretçi

bu RC (Referans Sayılı) akıllı işaretçi, paylaşılan sahiplik değerleri oluşturmak için işlevsellik sağlar. bu RC akıllı işaretçiler, bir değere yapılan başvuruların sayısını izler ve son başvuru kapsam dışında olduğunda değeri serbest bırakır.

bu RC Akıllı işaretçi, programınızın birçok bölümünde erişilebilirlik için bir değerin sahipliğini paylaşmanız gerektiğinde kullanışlıdır.

beyan etmek RC akıllı işaretçi, RC standart kitaplıktan yapı, yeni bir bildirim RC ile işaretçi yeni işlevi ile işaretçi değişkenini kopyalayın ve klon değişken.

kullanmak std:: rc:: Rc;

fnana() {

// RC akıllı işaretçinin yeni örneği
izin vermek x = Al:: yeni(5);
izin vermek y = Rc:: klon(&x);

yazdır!("x = {}, y = {}", x, y);
}

bu X değişken RC işaretçi değişkeni ve y değişken, bellekteki değere erişimi olan bir klondur. Referans sayısı ikidir ve değişkenler kapsam dışında olduğunda değer bellekten çıkarılır.

3. RefCell Akıllı İşaretçi

bu RefHücre akıllı işaretçi, belirli bir zamanda bir değiştirilebilir referans olduğu sürece değişmez ve değiştirilebilir referansların bir arada var olmasına izin veren dahili değişkenlik sağlar.

bu RefHücre akıllı işaretçi, değişebilir referansların sahip olduğu değerleri değiştirirken kullanışlıdır.

bu Refcell işlevi Rust'ın başlangıcının bir parçası değildir, bu nedenle akıllı işaretçiyi kullanmak için yapıyı standart kitaplıktan içe aktarmanız gerekir.

kullanmak std:: hücre:: RefCell;

fnana(){

// Refcell akıllı işaretçisinin yeni örneği
izin vermek x = RefCell:: yeni(5);

izin vermek y = x.borrow();
izin vermek z = x.borrow_mut();

yazdır!("y = {}", *y);
yazdır!("z = {}", *z);

}

bu Refcell akıllı işaretçi değeri içerir ve y değişken, değere değişmez referanstır. bu ödünç_mut işlev, değerin değişebilir bir referansını oluşturur.

Bir seferde yalnızca bir değiştirilebilir referans varsa, program güvenlidir.

4. Mutex Akıllı İşaretçi

bu muteks akıllı işaretçi, karşılıklı dışlamalar sağlar. bu muteks akıllı işaretçi, eşzamanlı programlarda birden çok iş parçacığı genelinde değerlere erişimi eşitlemek için kullanışlıdır.

bu muteks akıllı işaretçi, veri izlerini önlerken yalnızca bir iş parçacığının değere erişebilmesini sağlamak için karşılıklı dışlama sağlar.

içe aktarmanız gerekecek muteks struct ve ile yeni bir örnek oluşturun yeni kullanılacak fonksiyon muteks Rust'ta Akıllı İşaretçi.

kullanmak std:: sync:: Mutex;

fnana() {

// muteks işaretçisinin yeni örneği
izin vermek sayaç = Mutex:: yeni(0);

{
izin vermekmut sayı = counter.lock().unwrap();
*sayı += 1;
}

yazdır!("Sonuç: {}", *counter.lock().unwrap());
}

bu tezgah değişken yeni muteks misal. bu ana işlevi, muteks üzerinde bir kilit elde eder. kilit yöntemi muteks misal. Kilit, kilidi serbest bırakmadan ve değeri yazdırmadan önce sayaç değerinin güvenli bir şekilde değiştirilmesini sağlar.

bu muteks türü, paylaşılan kaynaklara yalnızca bir iş parçacığının erişebileceğini garanti eder (bu durumda, tezgah değişken) ve her seferinde değerini değiştirin. Karşılıklı dışlama, veri izlerini ve diğer eşzamanlılık sorunlarını önlemek için paylaşılan kaynaklara eşzamanlı erişimin serileştirilmesini sağlar.

Rust'ın Sahiplik Modeli Bellek Güvenliğini Garanti Ediyor

Akıllı işaretçiler, Rust'ın bellek güvenliği ve esnekliğine yönelik yaklaşımlarından biridir. Rust'ın sahiplik modeli, programların derleme zamanında ödünç alma denetleyicisi ile belleği güvenli bir şekilde kullanmasını sağlar.

Ödünç alma denetleyicisi, Rust'ın bellek erişilebilirliği ve değiştirilmesi için katı kurallar uygulayan sahiplik modelinin çok önemli bir özelliğidir.