7.1 Modüller (Modules): Header Dosyalarının Sonu

C++20 öncesinde kullanılan `#include` mekanizması, metin tabanlı bir kopyala-yapıştır işlemidir ve Derleme Sürelerinin (Compilation Times) logaritmik olarak artmasına neden olur. Modüller (Modules), kodu mantıksal birimlere ayırır ve sadece ihraç edilen (exported) kısımları görünür kılar.

Başlık Dosyası (Header File) Problemi

  • Makro sızıntıları (Macro leakages).
  • Sürekli yeniden derleme gereksinimi.
  • Sıralama bağımlılığı (Include order issues).

Modül (Module) Avantajları

  • Bir kez derlenir (Compiled once).
  • Sembol izolasyonu sağlar.
  • Derleme sürelerini %50'den fazla iyileştirebilir.

7.2 Modül Bağımlılık Hiyerarşisi

graph TD subgraph "Geleneksel Model" H1[header1.h] --> CP1[main.cpp] H2[header2.h] --> CP1 H1 --> CP2[other.cpp] end subgraph "Modern Modül Modeli" M1[export module Matematik] --> IM[import Matematik] M2[export module Veri] --> IM IM --> Main[Uygulama Mantığı] end style M1 fill:#f59e0b,stroke:#333,color:black style IM fill:#10b981,stroke:#333,color:black

Şema 7.1: Başlık Dosyaları (Headers) ve Modüller (Modules) Arasındaki Yapısal Fark

7.3 Uygulama: C++23 `expected` ve `print` Kullanımı

modern_cpp23_architecture.cpp
import std; // C++23: Tüm standart kütüphaneyi modül olarak içe aktarma

/**
 * @brief Akademik Hata Yönetimi: std::expected (C++23)
 * @details İstisna (Exception) fırlatmadan güvenli hata kontrolü sağlar.
 */
enum class MatematikHatasi { SifiraBolme, GecersizGirdi };

std::expected<double, MatematikHatasi> guvenli_bol(double a, double b) {
    if (b == 0.0) {
        return std::unexpected(MatematikHatasi::SifiraBolme);
    }
    return a / b;
}

int main() {
    auto sonuc = guvenli_bol(10.0, 0.0);

    if (sonuc) {
        // C++23: std::print ile modern formatlama
        std::print("Sonuc: {:.2f}\n", *sonuc);
    } else {
        if (sonuc.error() == MatematikHatasi::SifiraBolme) {
            std::println("Hata: Sifira bolme tespit edildi!");
        }
    }

    // if consteval: Derleme zamanı kontrolü
    if consteval {
        // Bu blok sadece derleme zamanında (compile-time) çalışır.
    }

    return 0;
}

Mimarın Analizi:

C++23 ile gelen `std::expected`, fonksiyonel programlama dillerindeki "Either" tipine benzer. İstisna Güvenliği (Exception Safety) maliyetine katlanmadan, hatanın varlığını ve tipini tip sisteminin (type system) bir parçası haline getirir. `std::print` ise `printf`'in hızı ile `cout`'un güvenliğini birleştirir.

Eşyordamlar (Coroutines):

C++20 ile gelen Eşyordamlar (Coroutines), `co_await`, `co_yield` ve `co_return` anahtar kelimeleriyle asenkron akışları senkronmuş gibi yazmamızı sağlar. Bu, özellikle oyun motorları ve yüksek trafikli sunucular için devrimseldir.

⚠️ Modern C++ Geçiş Hataları

Modül ve Başlık Karıştırma (Mixing Modules & Headers): Modüller içinde `#include` kullanırken dikkatli olunmalıdır. `global module fragment` alanı dışında yapılan include'lar beklenmedik sembol çakışmalarına yol açabilir.
Yanlış `consteval` Kullanımı: `consteval` fonksiyonlar sadece derleme zamanında çalışabilir. Çalışma zamanı (runtime) verisiyle çağrılmaya çalışıldığında derleme hatası verirler.

7.5 Modern Standartlar Testi

Soru: C++20 Modülleri (Modules) hakkında hangisi doğrudur?

Pratik Görev (Telegram Challenge):

"trcpp-telegram topluluğunda 'std::format' ve 'std::print' arasındaki farklar tartışılmaktadır. C++23 'import std;' kullanarak, bir öğrenci listesini (isim ve not) hizalı ve düzgün formatlı bir şekilde ekrana basan modern bir kod parçası tasarlayın."