Sistem Programlama

Rust ve C++ Arasındaki Temel Farklar: İki Sistem Dilinin Karşılaştırması

05 Kas 20237 dk okuma

Hem C++ hem de Rust kullanan biri olarak bana sık sık "Hangisi daha iyi?" diye sorulur. Dürüst cevap şudur: Bunlar, farklı sorunları çözmek için farklı felsefelerle tasarlanmış dillerdir—birbirlerinin "daha iyi sürümleri" değillerdir.

Bellek Yönetimine Yaklaşım

C++'ta bellek yönetimi büyük ölçüde geliştiricinin sorumluluğundadır. Bunu new/delete ile manuel olarak yönetebilir veya unique_ptr ve shared_ptr gibi akıllı işaretçilerle bu sorumluluğu hafifletebilirsiniz. Esneklik muazzamdır, ancak disiplin gerektirir; bir yerde unutulan bir delete veya yanlış paylaşılan bir işaretçi, canlı ortamda saatler süren bir "use-after-free" avına dönüşebilir.

Rust ise bu sorumluluğu derleyiciye devreder. Sahiplik (ownership) sistemi sayesinde, her değerin tek bir sahibi vardır ve sahibi kapsam dışına çıktığında değer otomatik olarak bellekten düşürülür (drop edilir):

fn main() {
    let mut s = String::from("hello");
    let r1 = &s; // no problem, immutable reference
    let r2 = &s; // no problem, immutable reference
    // let r3 = &mut s; // ERROR! Can't have both immutable and mutable refs at the same time.
}

Bu satırları derlemeye çalıştığınızda, hatayı çalışma zamanında değil, derleme zamanında görürsünüz. Aynı güvenliği C++'ta sağlamak için muhtemelen birkaç katman mutex veya akıllı işaretçi kullanmanız gerekirdi.

Derleyici Felsefesi ve Geliştirici Deneyimi

C++ derleyicisi büyük ölçüde size güvenir; "ne yapıyorsan doğrudur" prensibiyle çalışır, bu da size inanılmaz bir esneklik sağlar. Rust'ın derleyicisi (borrow checker ile) ise sizi sürekli sorgular—bu bazen sinir bozucu olabilir, ancak aynı zamanda tüm bir hata sınıfını üretim ortamına (production) ulaşmadan önce ortadan kaldırır.

Pratikte onları farklı yerlerde kullanıyorum: Performansın kritik olduğu ve eski (legacy) bir kod tabanıyla çalıştığım projeler için C++; uzun vadeli bakım kolaylığı istediğim yeni (greenfield) servisler için Rust. Her ikisi de "metale yakın" (close to the metal) dillerdir, ancak güvenlik ve esneklik arasındaki dengeyi çok farklı noktalarda kurarlar.

Ekosistem ve Paket Yönetimi

Küçük ama pratik bir fark daha var: Rust'ın cargo paket yöneticisi, bağımlılık yönetimini C++'ın CMake + vcpkg/Conan karmaşıklığından çok daha rahat hale getiriyor. Bu, günlük geliştirme deneyimini doğrudan etkileyen ve hafife alınmaması gereken bir detaydır.

Sonuç Yerine

Rust öğrenmek, C++ bilginizi çöpe atmanız gerektiği anlamına gelmez; aksine, sahiplik mantığını anladıktan sonra C++'ta da daha dikkatli, daha bilinçli bellek yönetimi uygulamaya başlarsınız. Bence her ikisini de bilmek, sistemlere iki farklı perspektiften bakmanızı sağlar.

F
Ferivonus
Sistemleri İnşa Ediyor.
RustC++Sistem ProgramlamaBellek Yönetimi