Rust Dili Hakında
1. Rust Dili Nedir
Rust, Mozilla tarafından geliştirilen; hız, bellek güvenliği ve güvenli eşzamanlılık (concurrency) odaklı bir dildir. Neden geliştirildi? C++'ın sunduğu yüksek performansı korurken, yazılımcı hatalarından kaynaklanan bellek sızıntılarını ve "segmentation fault" gibi çökme nedenlerini tamamen ortadan kaldırmak için doğmuştur.
1.1. Sahiplik (Ownership) Sistemi
Rust'ın kalbidir. Bellek yönetimini ne bir Garbage Collector'a ne de manuel free() komutlarına bırakır. Bunun yerine, derleme aşamasında kuralları denetleyen benzersiz bir mülkiyet sistemi kullanır.
- 1.1.1. Sahip Olduğunuz Veri
Bellekte yer alan veri, bir sahibi vardır. Sahibin yokluğu, bellekte yer alan verinin yok olmasına neden olur.
- 1.1.2. Veri Sahibi
Rust'ta bir değişkenin sahibi, derleme anında belirlenir. Bu sahibi, verinin yaşam döngüsünü kontrol eder.
- 1.1.3. Veri Sahibi Olmak
Bir değişkenin sahibi olmak, verinin yaşam döngüsünü kontrol etmek demektir. Sahibi, verinin yok olması için sorumludur.
2. Temel Söz Dizimi (Syntax) ve Değişkenler
Rust, varsayılan olarak değişmezlik (immutability) ilkesini benimser. Bir değişkenin değerini daha sonra değiştirmek istiyorsanız bunu açıkça belirtmelisiniz.
- 2.1. Değişken Tanımlama
Rust let x = 5; // Değişmez (Immutable) let mut y = 10; // Değişebilir (Mutable) y = 15; // Geçerli
- 2.2. Strongly Typed (Güçlü Tip Sistemi)
Rust her değişkenin tipini derleme anında bilmek zorundadır. Ancak "Type Inference" özelliği sayesinde çoğu zaman tipi sizin yerinize tahmin eder.
3. Kontrol Yapıları
Rust'ta kontrol yapıları birer "ifade" (expression) oldukları için değer döndürebilirler.
- 3.1. If (Eğer)
if: Parantez kullanımı zorunlu değildir ancak süslü parantezler şarttır.
- 3.2. Loop, While, For
loop, while, for: Go gibi Rust'ta da for döngüsü çok güçlüdür ve genellikle iterators (yineleyiciler) ile kullanılır. while koşul tabanlıdır, loop ise sonsuz döngü içindir.
- 3.3. Match (Desen Eşleştirme)
Match (Desen Eşleştirme): Diğer dillerdeki switch-case yapısının çok daha güçlü ve güvenli halidir. Tüm ihtimallerin (exhaustive) kapsanmasını zorunlu kılar.
4. Fonksiyonlar ve Paket Yönetimi
Rust'ta fonksiyonlar fn anahtar kelimesiyle tanımlanır.
- 4.1. Geri Dönüş Değerleri
Fonksiyonun son satırı noktalı virgül içermiyorsa, o satır dönüş değeri kabul edilir.
Rust fn topla(a: i32, b: i32) -> i32 { a + b // Return anahtar kelimesine gerek yok }
- 4.2. Cargo
Cargo: Rust'ın paket yöneticisi ve derleme aracıdır. Dünyanın en iyi paket yöneticilerinden biri kabul edilir. Bağımlılıkları Cargo.toml dosyasında yönetir.
5. Veri Yapıları: Arrays, Vectors ve Tuples
- 5.1. Arrays
Arrays: Sabit uzunlukludur ve stack üzerinde tutulur.
- 5.2. Vectors (Vec)
Vectors (Vec): Dinamik olarak büyüyebilen, heap üzerinde tutulan dizilerdir. En yaygın kullanılan veri yapısıdır.
- 5.3. Tuples
Tuples: Farklı tiplerdeki verileri tek bir bileşik yapıda toplamanızı sağlar.
6. Bellek Yönetimi ve Eşzamanlılık (Rust'ın Farkı)
Rust, verinin mülkiyetini takip ederek veri yarışlarını (data races) derleme aşamasında engeller.
- 6.1. Borrowing (Ödünç Alma)
Borrowing (Ödünç Alma): Bir veriyi kopyalamak yerine referansını (&) vererek "ödünç" verebilirsiniz.
- 6.2. Fearless Concurrency
Fearless Concurrency: Rust'ın sahiplik kuralları, iki farklı iş parçacığının (thread) aynı anda aynı veriyi değiştirmesini derleme anında yasaklar. Bu da "korkusuz eşzamanlılık" sağlar.
7. Hata Yönetimi (Error Handling)
Rust'ta exception (istisna) mekanizması yoktur. Hatalar iki ana gruba ayrılır:
- 7.1. Recoverable (Kurtarılabilir)
Recoverable (Kurtarılabilir): Result<T, E> enum yapısı kullanılır. Bir işlem başarılıysa Ok, başarısızsa Err döner.
- 7.2. Unrecoverable (Kurtarılamaz)
Unrecoverable (Kurtarılamaz): panic! makrosu ile program güvenli bir şekilde durdurulur.
Rust // Hata yönetim örneği let dosya = File::open("test.txt"); let sonuc = match dosya { Ok(file) => file, Err(error) => panic!("Dosya açılamadı: {:?}", error), };
Özet: Rust Nerede Kullanılır?
Rust, özellikle güvenliğin ve performansın kritik olduğu şu alanlarda rakipsizdir:
- Cloud-Native & Mikroservisler
Düşük bellek kullanımı ile yüksek verim.
- WebAssembly (WASM)
Tarayıcı üzerinde C++ performansı ile kod çalıştırma.
- Sistem Programlama
İşletim sistemleri (Linux çekirdeğine dahil edilmeye başlandı), sürücüler ve oyun motorları.
- Blockchain
Güvenli akıllı sözleşme (smart contract) geliştirme.
Konuyu Yanıtla
Markdown destekler · Alıntı, kod, liste kullanabilirsinizKonuyu yanıtlamak için giriş yapmalısınız.