Programlama Dillerinin Evrimi: C'den Rust'a Uzanan Yolculuk
1970'lerin donanıma hükmeden C dilinden modern çağın bellek güvenliği standardı Rust'a: Sistem programlamasında hız, soyutlama ve güvenlik arayışının yarım asırlık anatomisi.
## Giriş: Donanıma Yakın Olma Arzusu ve C Devrimi
1972 yılında Dennis Ritchie ve Bell Laboratuvarları ekibi C dilini geliştirdiğinde, yazılım dünyasında kalıcı bir paradigma değişikliği başlattı. C, geliştiricilere daha önce yalnızca Assembly ile mümkün olan doğrudan bellek erişimi ve makine düzeyinde kontrol yeteneğini, taşınabilir ve okunabilir bir sözdizimiyle sundu. Unix işletim sisteminin C ile baştan yazılması, modern işletim sistemleri, derleyiciler, veritabanları ve ağ protokollerinin temelini attı.
C'nin temel felsefesi basitti: **"Programcıya güven."** Bu felsefe;
- Doğrudan bellek adresleme (göstericiler / pointers),
- Manuel bellek yönetimi (`malloc` ve `free`),
- Çalışma zamanı ek yükünün (runtime overhead) asgariye indirilmesi
gibi muazzam avantajlar sağladı. Ancak bu mutlak özgürlük, beraberinde ağır bir sorumluluk da getirdi.
---
## Bellek Yönetiminin Bedeli: Güvenlik Açıkları ve C++ Evrimi
Yıllar içinde yazılımların karmaşıklığı katlanarak arttı. C dilinin sunduğu sınırsız esneklik, insan hatasına son derece açık bir zemin hazırladı. Birkaç temel sorun sürekli olarak sistemleri tehdit etti:
- **Dangling Pointers (Askıda Göstericiler):** Serbest bırakılmış bir bellek adresine erişmeye çalışmak.
- **Buffer Overflow (Tampon Bellek Taşması):** Ayrılan bellek sınırının ötesine yazarak kritik verileri veya komut işaretçilerini bozmak.
- **Double Free (Çifte Serbest Bırakma):** Aynı bellek bloğunu iki kez iade etmeye çalışarak bellek yöneticisini çökertmek.
- **Data Races (Veri Yarışları):** Çok iş parçacıklı (multithreaded) ortamlarda aynı bellek adresine senkronizasyonsuz eşzamanlı erişim.
1980'lerin başında Bjarne Stroustrup tarafından geliştirilen **C++**, nesne yönelimli programlama (OOP), şablonlar (templates) ve RAII (*Resource Acquisition Is Initialization*) gibi güçlü mekanizmalar sundu. Modern C++ (C++11 ve sonrası); `std::unique_ptr` ve `std::shared_ptr` gibi akıllı göstericilerle manuel bellek yönetimini büyük ölçüde evcilleştirdi. Ancak geriye dönük uyumluluk zorunluluğu ve dilin devasa karmaşıklığı, bellek hatalarını tamamen ortadan kaldıramadı. Microsoft ve Chromium ekiplerinin güvenlik raporları, kritik güvenlik açıklarının yaklaşık %70'inin hâlâ bellek güvenliği ihlallerinden kaynaklandığını defalarca ortaya koydu.
---
## Yönetilen Çalışma Zamanları (Managed Runtimes): Güvenlik İçin Verilen Tavizler
1990'lar ve 2000'lerin başında Java, C# ve daha sonra Go gibi diller sahneye çıktı. Bu dillerin bellek güvenliğine yaklaşımı radikaldi: **Çöp Toplayıcı (Garbage Collector - GC)**.
GC mimarisi, geliştiriciyi bellek serbest bırakma sorumluluğundan tamamen kurtardı. Ancak bu konforun bedeli vardı:
1. **Öngörülemeyen Gecikmeler (Stop-the-World Pauses):** Gerçek zamanlı sistemler, oyun motorları, ses işleme algoritmaları veya işletim sistemi çekirdekleri için kabul edilemez duraklamalar.
2. **Yüksek Bellek Ayak İzi:** Çöp toplayıcının verimli çalışabilmesi için genellikle uygulamanın ihtiyaç duyduğundan belirgin şekilde daha fazla RAM gerekir.
3. **Donanım Üzerindeki Kontrolün Kaybı:** Doğrudan bellek düzeni, önbellek hizalaması (cache locality) ve SIMD optimizasyonları zorlaştı.
Sonuç olarak, sistem programlama dünyası uzun yıllar şu çözümsüz gibi görünen üçgene hapsoldu:
* **Hız ve Kontrol (C, C++)**
* **Bellek Güvenliği (Java, Go, C#)**
* **Geliştirici Ergonomisi**
Bu üç unsuru aynı anda elde etmek imkânsız bir hayal gibi görünüyordu.
---
## Rust Sahneye Çıkıyor: Sıfır Maliyetli Güvenlik Devrimi
2006'da Graydon Hoare tarafından kişisel bir proje olarak başlatılan ve 2010'da Mozilla tarafından desteklenen **Rust**, 2015 yılında 1.0 kararlı sürümüne ulaştığında bu açmazı kökünden çözmeyi hedefledi: **Çöp toplayıcı olmadan, çalışma zamanı ek yükü getirmeden %100 bellek güvenliği.**
Rust bu devrimi üç ana sütun üzerine kurdu:
### 1. Mülkiyet (Ownership) Modeli
Rust'ta her değerin tek bir "sahibi" (owner) olan değişkeni vardır. Değişkenin tanımlandığı kapsam (scope) sona erdiğinde, bellek derleyici tarafından otomatik ve deterministik olarak iade edilir. Bu sayede bellek sızıntıları ve çifte serbest bırakma (double free) derleme aşamasında engellenir.
### 2. Ödünç Alma (Borrowing) ve Yaşam Süreleri (Lifetimes)
Verileri kopyalamadan paylaşmak için Rust referansları kullanır, ancak çok net bir kuralla:
- Aynı anda ya **sınırsız sayıda değişmez (immutable) referans (`&T`)** alabilirsiniz,
- Ya da **yalnızca tek bir değiştirilebilir (mutable) referans (`&mut T`)** alabilirsiniz.
Bu "Tek Değiştirici veya Çoklu Okuyucu" kuralı, veri yarışlarını (data races) ve askıda göstericileri (dangling pointers) henüz derleme aşamasındayken tamamen imkânsız kılar. Yaşam süreleri (lifetimes) ise bir referansın işaret ettiği veriden daha uzun yaşamasını matematiksel olarak engeller.
### 3. Sıfır Maliyetli Soyutlamalar (Zero-Cost Abstractions)
Bjarne Stroustrup'un ilkesini benimseyen Rust; yüksek seviyeli dil yapılarını (pattern matching, iteratörler, closures, traits) derleyerek optimize edilmiş çıplak makine koduna dönüştürür. Kullanmadığınız hiçbir özelliğin bedelini çalışma zamanında ödemezsiniz.
---
## Sistem Programlamasında Yeni Bir Çağ
Bugün Rust, bir heves veya niş bir teknoloji olmanın çok ötesine geçti:
* **Linux Çekirdeği:** 30 yılı aşkın süredir yalnızca C ile geliştirilen Linux çekirdeğine, C'nin yanına eklenen ilk ve tek resmi dil Rust oldu.
* **Büyük Teknoloji Devleri:** Microsoft Windows çekirdeğindeki kritik bileşenleri Rust ile yeniden yazıyor; Android açık kaynak projesi (AOSP) bellek kaynaklı güvenlik açıklarını azaltmak için Rust'ı birincil sistem dili yaptı; Amazon Web Services (AWS) altyapı servislerinde Rust'a güveniyor.
* **Modern Web ve Araç Zincirleri:** WebAssembly ekosistemi, yeni nesil JavaScript derleyicileri (SWC, Turbopack) ve yüksek performanslı CLI araçları (ripgrep, bat) Rust ile inşa ediliyor.
---
## Sonuç: Donanım Kısıtlarından Güvenlik Odaklı Geleceğe
C'den Rust'a uzanan evrim, bilgisayar biliminin önceliklerindeki köklü dönüşümü gözler önüne sermektedir:
- 1970'lerde birincil kısıt **donanım kaynaklarının yetersizliğiydi**; her bayt ve CPU döngüsü hayati öneme sahipti.
- 2020'lerde ve ötesinde ise birincil kısıt **siber güvenlik, güvenilirlik ve yazılım karmaşıklığıdır**.
C, dijital dünyamızın temel taşı olmaya devam edecek; ancak Rust, donanım düzeyinde güçten ve determinizmden ödün vermeden güvenli ve sağlam sistemler inşa etmenin mümkün olduğunu kanıtladı. Sistem programlamanın geleceği artık geçmişin hatalarını tekrarlamak zorunda değil.
From the blog
View all postsblog.categories.teknoloji
2026'da Mobil Uygulama Geliştirme: Flutter ve React Native Karşılaştırması
2026 yılı itibarıyla mobil uygulama geliştirme ekosisteminde Flutter ve React Native'in geldiği son nokta: Impeller motoru, React 19, Bridgeless mimari ve modern teknoloji seçimi rehberi.

blog.categories.teknoloji
Modern Windows Uygulama Geliştirme: .NET ve C# ile Güçlü Masaüstü Çözümleri
C# ve .NET ekosistemi, WPF'ten WinUI 3'e uzanan modern teknolojileriyle Windows masaüstü uygulama geliştirmede standartları belirliyor. Bu rehberde mimari yaklaşımları, modern araçları ve en iyi pratikleri inceliyoruz.
