---
title: "Rust Programcıları İçin C: Sistem Programlamaya Tersten Bakış"
url: https://blog.edumints.com/rust-programcilari-icin-c-sistem-programlamaya-tersten-bakis
category: "Yazılım"
date: 2026-10-11T09:22:47.077Z
publisher: Edumints Blog
lang: tr-TR
source_name: "Hacker News"
source_url: https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/
---

# Rust Programcıları İçin C: Sistem Programlamaya Tersten Bakış

Çoğu geliştirici sistem programlamaya C veya C++ ile adım atıp ardından modern bir alternatif olan Rust'a geçer. Bu nedenle internette "C Programcıları İçin Rust" başlıklı sayısız kaynak bulabilirsiniz. Ancak ilk sistem programlama dili olarak doğrudan Rust'ı öğrenenler için C dünyasına adım atmak tam anlamıyla kafa karıştırıcı ve şaşırtıcı detaylarla doludur. Modern derleyici garantilerinden ve zengin tip sisteminden sonra C'nin kendine has tuhaflıklarına alışmak, yazılım mimarisi açısından farklı bir zihniyet dönüşümü gerektirir.

Bu yazıda, Rust kökenli bir bakış açısıyla C öğrenirken karşılaşılan iki temel yapısal farkı ve pratik çıkarımlarını inceliyoruz.

## 1. Boolean Değerler Varsayılan Olarak Yerleşik Değildir

Rust'ta `bool` türü dilin en temel yapı taşlarından biridir; `true` ve `false` ise kesin anahtar sözcüklerdir. Oysa C dilinin orijinal sürümünde yerleşik bir boolean ilkel tipi bulunmuyordu. Koşullu ifadeler doğrudan tamsayılar üzerinden yürütülüyor; mantıksal doğruluk için `1`, yanlışlık içinse `0` kullanılıyordu.

Bu durum C99 standardıyla esnetilerek `<stdbool.h>` başlık dosyası üzerinden boolean desteği getirildi. Ancak burada bile `true` ve `false` gerçek anahtar kelimeler değil, sırasıyla `1` ve `0` değerlerine açılan basit önişlemci makrolarıydı (`#define true 1`). C23 standardı ile boolean değerler nihayet gerçek bir dil ilkel türü haline gelmiş olsa da, eski standartları hedefleyen projelerde `<stdbool.h>` kütüphanesini manuel dahil etmek şarttır.

- **Pratik Çıkarım:** Rust'ın katı tip güvenliğinden gelen geliştiriciler, C'de türlerin örtük biçimde tamsayılara dönüşebilmesine ve derleyici standartlarının getirdiği davranış farklılıklarına karşı çok daha dikkatli olmalıdır.

## 2. Null ile Sonlandırılan Dizgiler (Null-Terminated Strings)

Rust dilinde bir `&str` referansı 16 bayttır; 8 bayt bellek adresini (gösterici), 8 bayt ise dizginin uzunluğunu saklar. Bu dinamik boyutlu dil yapısı (fat pointer), dize uzunluğunu `O(1)` karmaşıklığında anında öğrenmeyi sağlar ancak her referans için fazladan bellek harcar.

C ise tamamen farklı bir mühendislik takası benimser: Dize uzunluğunu ayrı bir değişkende tutmaz, bunun yerine her dizeyi sonlandıran bir null baytı (`\0`) kullanır. Bu tercihin getirdiği önemli sonuçlar şunlardır:

- Programların dize yanında ek bir boyut değişkeni taşımasına gerek kalmaz.
- Her dize, null sonlandırıcı için fazladan 1 baytlık alana ihtiyaç duyar; yani boş bir dize `""` bile bellekte 1 bayt yer kaplar.
- Dizenin ortasında `\0` baytı yer alamaz; aksi halde standart `string.h` fonksiyonları dizeyi erken keser.
- Sonlandırıcı baytı unutmak, sınır dışı bellek okumalarına (**out-of-bounds read**) ve güvenlik açıklarına yol açar.

Pratikte bu durum, C ile dize tersine çevirirken bile `malloc(len + 1)` ile fazladan yer ayırmayı ve sona açıkça `\0` eklemeyi zorunlu kılar. Rust'ta dilin mülkiyet ve dilim (slice) modeli bunu arka planda güvenle çözerken, C'de tüm sorumluluk tamamen geliştiricidedir.

- **Öğrenme Çıkarımı:** C öğrenmek, bellek düzeninin ve veri temsillerinin donanım seviyesinde nasıl işlediğini kavramak açısından eşsiz bir yetkinlik kazandırır.

---

**Kaynak:** Hacker News (https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/)
**Yayıncı:** [Edumints Blog](https://blog.edumints.com) · Alıntılarken bu URL'ye bağlantı verin: https://blog.edumints.com/rust-programcilari-icin-c-sistem-programlamaya-tersten-bakis
