Yazılım Geliştirme

Rust Nedir? Bellek Güvenli Dillerin Yükselişi

Bellek güvenliği sayesinde güvenlik açıklarını azaltan Rust'ın nasıl çalıştığını ve neden sistem yazılımlarında hızla yayıldığını açıklıyoruz.

Aurora YazılımEditör ekibi 6 dk okuma
Rust Nedir? Bellek Güvenli Dillerin Yükselişi
Rust nedir?

Rust, C ve C++ kadar hızlı çalışan, ama bellek güvenliğini derleme aşamasında garanti altına alan açık kaynaklı bir sistem programlama dilidir. Rust nedir sorusunun özü, sahiplik modelidir: çöp toplayıcı kullanmadan, bellek taşması ve serbest bırakılmış belleğe erişim gibi hataları program çalışmadan önce engeller. İşletim sistemi, tarayıcı ve sunucu yazılımlarında giderek yaygınlaşıyor.

Rust Programlama Dili Nedir?

Rust programlama dili, Mozilla bünyesinde başlayan bir projeden doğdu ve ilk kararlı sürümü 2015'te yayımlandı. Bugün bağımsız Rust Foundation çatısı altında, geniş bir topluluk tarafından geliştiriliyor. Resmî belgeler ve kurulum için başvuru adresi rust-lang.org sitesidir.

Dilin hedefi iddialıdır: düşük seviyeli dillerin hız ve kontrolünü, yüksek seviyeli dillerin güvenliğiyle birleştirmek. Geleneksel olarak bu iki özellik arasında seçim yapmak gerekirdi; Rust ikisini birden sunmayı amaçlar.

Rust; komut satırı araçlarından ağ servislerine, gömülü cihazlardan tarayıcıda çalışan WebAssembly modüllerine kadar geniş bir alanda kullanılır. Özellikle güvenliğin ve performansın aynı anda kritik olduğu yerlerde öne çıkar.

Bellek Güvenliği Neden Bu Kadar Önemli?

C ve C++ gibi dillerde bellek yönetimi büyük ölçüde geliştiriciye aittir. Bir dizinin sınırının dışına yazmak, serbest bırakılmış bir belleği tekrar kullanmak ya da aynı belleği iki kez serbest bırakmak, programın çökmesine veya saldırganın kod çalıştırmasına yol açabilir.

Bu sorun kuramsal değildir. Microsoft ve Google'ın Chromium ekibi, kendi ürünlerindeki ciddi güvenlik açıklarının yaklaşık yüzde 70'inin bellek güvenliği kaynaklı olduğunu kamuoyuyla paylaştı. Bu nedenle pek çok kamu kurumu ve büyük teknoloji şirketi, yeni projelerde bellek güvenli dillerin tercih edilmesini öneriyor.

Java, C#, Go ve Python gibi diller bu sorunu büyük ölçüde çöp toplayıcı (garbage collector) ile çözer. Bedeli, çalışma sırasında ek yük ve zaman zaman öngörülemeyen duraklamalardır. Rust ise aynı güvenliği çöp toplayıcı olmadan, derleme zamanında sağlar.

Sahiplik ve Ödünç Alma Nasıl Çalışır?

Rust'ın güvenliği üç temel kurala dayanır. İlk başta alışılmadık gelse de, bu kurallar bir kez oturduğunda pek çok hatayı kod çalışmadan yakalamanızı sağlar.

rustSahiplik ve ödünç alma örneği
fn uzunluk(metin: &String) -> usize {
    metin.len()
}

fn main() {
    let selam = String::from("Merhaba");
    let n = uzunluk(&selam); // ödünç verildi, sahiplik bizde
    println!("{} karakter: {}", n, selam);

    let tasindi = selam; // sahiplik taşındı
    // println!("{}", selam); // derleme hatası: selam artık geçersiz
    println!("{}", tasindi);
}

Sahiplik (ownership)

Her değerin tek bir sahibi vardır. Sahip kapsam dışına çıktığında bellek otomatik olarak serbest bırakılır. Değer başka bir değişkene aktarıldığında sahiplik de taşınır; eski değişken artık kullanılamaz.

Ödünç alma (borrowing)

Bir değeri sahipliğini devretmeden kullanmak için referans alınır. Aynı anda ya birden çok salt okunur referans ya da tek bir değiştirilebilir referans olabilir. Bu kural, veri yarışı (data race) denen eş zamanlılık hatalarını derleme anında engeller.

Ömürler (lifetimes)

Derleyici, bir referansın işaret ettiği verinin referanstan daha uzun yaşadığını doğrular. Böylece sarkan işaretçi (dangling pointer) denen hata türü ortadan kalkar.

Rust ile C++ Farkı

Rust ve C++ benzer alanlarda kullanılır ve performansları genellikle aynı düzeydedir. Asıl fark, güvenliğin kimin sorumluluğunda olduğudur.

ÖlçütC++Rust
Bellek güvenliğiGeliştiricinin dikkatine bağlıDerleyici tarafından denetlenir
Çöp toplayıcıYokYok
PerformansÇok yüksekÇok yüksek
Eş zamanlılık hatalarıÇalışma zamanında ortaya çıkabilirVeri yarışları derlemede engellenir
Paket yönetimiBirden çok araçResmî araç: Cargo
Öğrenme eğrisiUzun ve dağınıkBaşta dik, sonra tutarlı
Ekosistem yaşıOnlarca yıllıkDaha genç, hızla büyüyen

Rust Nerelerde Kullanılıyor?

Tarayıcıda Rust kodu çalıştırmanın yolunu WebAssembly nedir yazımızda, düşük bellek ve hızlı açılışın neden önemli olduğunu ise serverless nedir yazımızda ele aldık.

  • İşletim sistemleri: Linux çekirdeği Rust ile yazılmış sürücüleri kabul etmeye başladı; Windows'un bazı bileşenlerinde de Rust kullanılıyor.
  • Tarayıcılar: Firefox'un çeşitli bileşenleri Rust ile yazıldı.
  • Ağ ve sunucu yazılımı: yüksek trafikli servisler, vekil sunucular ve CDN altyapıları.
  • Komut satırı araçları: hızlı arama, dosya ve paket yönetimi araçları.
  • WebAssembly: tarayıcıda yerel hıza yakın çalışan modüller.
  • Gömülü sistemler: sınırlı kaynaklı cihazlarda güvenli yazılım.
  • Bulut ve sunucusuz çalışma: hızlı açılış süresi ve düşük bellek kullanımı gerektiren fonksiyonlar.

Rust Kurulumu ve İlk Proje

Rust'ın resmî kurulum aracı rustup'tır; derleyiciyi, Cargo paket yöneticisini ve standart kütüphaneyi birlikte kurar, güncel kararlı sürümü takip eder.

bashDoğrulama ve ilk proje
rustc --version
cargo --version
cargo new merhaba
cd merhaba
cargo run

macOS ve Linux

Terminalde aşağıdaki komutu çalıştırıp yönergeleri izleyin. Kurulumdan sonra terminali kapatıp açın.

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Windows

rust-lang.org sitesindeki kurulum sayfasından rustup-init.exe dosyasını indirip çalıştırın. Kurulum, gerekirse Visual Studio C++ derleme araçlarını kurmanızı ister; bu araçlar olmadan bağlama (linking) adımı başarısız olur.

Rust Öğrenmeli misiniz?

Rust'ın en çok konuşulan zorluğu öğrenme eğrisidir. Derleyici sıkı kurallar uygular ve ilk haftalarda sık sık hata mesajlarıyla karşılaşırsınız. İyi haber, bu mesajların açıklayıcı olması ve çoğu zaman çözümü doğrudan önermesidir.

Sistem programlama, performans kritik servisler, gömülü yazılım ya da güvenlik alanında çalışmak istiyorsanız Rust güçlü bir yatırımdır. Web sitesi ya da iş uygulaması geliştirmek istiyorsanız ise önce JavaScript, PHP ya da Python gibi dillerle başlamak daha hızlı sonuç verir; Rust'ı sonra, performans gerektiren parçalar için ekleyebilirsiniz.

Öğrenirken derleyiciyle kavga etmek yerine onu bir eğitmen gibi görün. Her hata mesajı, ileride üretimde karşılaşabileceğiniz bir sorunu önceden gösterir. Topluluğun forumları ve resmî belgeler de yeni başlayanlara karşı oldukça yardımseverdir.

  • Resmî kitap: The Rust Programming Language, ücretsiz ve çevrim içi.
  • Rust by Example: kısa, çalıştırılabilir örnekler.
  • Küçük bir CLI aracı yazın: dosya okuyan, metin işleyen basit bir program en iyi alıştırmadır.

Bellek Güvenli Dillerin Geleceği

Güvenli programlama dilleri artık yalnızca geliştirici tercihi değil, güvenlik politikasının bir parçası olarak görülüyor. Yeni yazılan kritik bileşenlerde bellek güvenli dil seçmek, gelecekte ortaya çıkabilecek açıkların önemli bir kısmını baştan önler.

Bu, tüm C ve C++ kodunun yeniden yazılacağı anlamına gelmez. Daha gerçekçi tablo, yeni bileşenlerin güvenli dillerle yazılması ve mevcut sistemlerle birlikte çalışmasıdır. Rust'ın C ile kolay bağlantı kurabilmesi bu geçişi mümkün kılıyor.

İşletmeler açısından mesaj şudur: kullandığınız yazılımın hangi dille yazıldığından çok, güvenliğin geliştirme sürecine nasıl yerleştirildiği önemlidir. Aurora Yazılım'da sektörel yazılım çözümleri ve e-ticaret altyapısı projelerinde dil seçimini ihtiyaca göre yapıyor, güvenlik ve performansı baştan planlıyoruz. Web tarafında hızın nasıl ölçülüp iyileştirildiğini hız ve performans yönetimi sayfamızda anlattık.

Sık Sorulan Sorular

01Rust web geliştirmede kullanılır mı?

Evet, sunucu tarafında Rust ile yazılmış web çatıları ve API servisleri bulunur. Ancak ekosistem JavaScript, PHP ya da Python kadar geniş değildir. Rust genellikle yüksek performans gereken servislerde ya da WebAssembly modüllerinde tercih edilir.

02Rust, C++'ın yerini alacak mı?

Kısa vadede hayır; C++ ile yazılmış devasa bir kod tabanı var ve dil gelişmeye devam ediyor. Ancak yeni projelerde, özellikle güvenliğin kritik olduğu alanlarda Rust giderek daha sık seçiliyor.

03Rust'ta unsafe ne demek?

Unsafe, derleyicinin bazı denetimlerini belirli bir kod bloğu için devre dışı bırakan anahtar sözcüktür. Donanıma erişim ya da C kütüphaneleriyle bağlantı gibi durumlarda gerekir. İyi yazılmış projelerde bu bloklar küçük tutulur ve dikkatle incelenir.

Rust, hız ile güvenliği bir araya getirerek sistem yazılımlarında yeni bir standart oluşturuyor; bellek kaynaklı açıkların büyük kısmını daha kod çalışmadan engelliyor. Güvenlik ve performansı baştan düşünülmüş bir yazılım için yazılım çözümlerimizi inceleyebilir, web projeniz için web tasarımı hizmetimize göz atabilir ya da bizimle iletişime geçebilirsiniz.