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
Ş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ı
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ı
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."