- C++20'nin ardından gelen yeni nesil C++ standardı
- C++98, C++11, C++20 gibi oyun değiştirici bir sürüm değil; daha çok C++17 düzeyinde küçük değişiklikler içeriyor
(40 yıl boyunca) C++ standardındaki değişimleri inceleyelim
C++98
- 80'lerin sonlarında Bjarne Stroustrup ve Margaret A. Ellis, ünlü Annotated C++ Reference Manual (ARM) kitabını yazdı
- Bu kitabın iki amacı vardı
- Çok fazla bağımsız C++ implementasyonu bulunduğu için ARM, C++'ın özelliklerini tanımladı
- C++ standardı olan C++98'in (ISO/IEC 14882) temeli oldu
- C++98 bazı önemli özellikler içeriyordu
- Templates
- STL(Standard Template Library): container'lar, algoritmalar, string, IO Stream'ler içeriyordu
C++03
- C++03'te (14882:2003) çok küçük teknik düzeltmeler yapıldı
- Toplulukta C++98'i de kapsayan C++03'e "legacy C++" deniyor
TR1
- 2005'te ilginç bir gelişme oldu: TR1(Technical Report 1) yayımlandı
- TR1, C++11 için büyük bir adım ve Modern C++'a giden yolun ilk adımıydı
- C++ standart komitesi üyelerinin Boost projesine dayanıyordu
- Sonraki C++ standardına girecek 13 kütüphane içeriyordu (regular expression, rastgele sayı üretimi,
std::shard_ptr gibi smart pointer'lar, hash table'lar vb.)
C++11
- Sonraki C++ standardıydı, ancak biz buna Modern C++ diyoruz. Bu adlandırma C++14 ve C++17'yi de kapsıyor
- C++11, C++ geliştirme biçimimizi tamamen değiştirdi
- TR1 bileşenlerinin yanı sıra move semantics, perfect forwarding, variadic templates, constexpr gibi özellikleri getirdi
- Threading tabanlı memory model ve Threading API dahil edildi
C++14
- Küçük bir C++ standardı. Read-writer lock'lar, genelleştirilmiş lambda'lar ve constexpr fonksiyonlar getirildi
C++17
- Ne çok büyük ne de çok küçük
- İki öne çıkan özellik içeriyordu: Parallel STL ve standartlaştırılmış filesystem
- Yaklaşık 80 STL algoritması execution policy üzerinden çalıştırılabiliyor (paralel, sıralı, vektörize)
- Boost'tan güçlü şekilde etkilendi. Filesystem ve üç veri tipi (
std::optional, std::variant, std::any) eklendi
C++20
- C++20 da C++11 gibi C++ programlama biçimimizi değiştirdi
- Özellikle dört büyük yenilik vardı
- Ranges: Ranges kütüphanesiyle container'lar üzerinde doğrudan algoritma ifade edilebilir ve algoritmalar pipe işaretiyle birleştirilerek sonsuz veri akışlarına uygulanabilir
- Coroutines: C++'ta asenkron programlamayı ana akım hâline getirdi. Eşgüdümlü görevlerin, event loop'ların, sonsuz veri akışlarının ve pipeline'ların temeli oldu
- Concepts: Template'leri düşünme ve programlama biçimimizi değiştirdi. Template argümanlarına kısıt koymayı, tür kontrolü yapmayı ve bunları derleme zamanında doğrulamayı sağladı
- Modules: Header dosyalarının sınırlarını aşmayı sağladı. Örneğin preprocessor ihtiyacını ortadan kaldırma, sonuçta build sürelerini kısaltma ve paketleri daha kolay build etme gibi çeşitli vaatler sundu
C++23
- Temmuz 2023 itibarıyla C++23 son oylama öncesindeydi
- Küçük ama dilin kendisi üzerinde çok etkili olan "Deducing this" özelliğini ekledi
- Python'a benzer şekilde, üye fonksiyonlara implicit olarak geçirilen
this pointer'ı explicit hâle getirilebiliyor
- Bu sayede CRTP(Curiously Recurring Template Pattern) gibi karmaşık tekniklerin veya Overload pattern implementasyonunun yazılması kolaylaşıyor
- C++23 kütüphanesine de önemli eklemeler geldi
import std; ile standart kütüphane doğrudan import edilebiliyor ve std:print ile std:println içinde C++20 format string kullanılabiliyor
- Performans açısından
std::map yerine geçebilecek std::flat_map
std::optional arayüzü, composability için monadic arayüzle genişletildi
- Yeni veri tipi
std::expected
- Çok boyutlu span olan
std::mdspan
- Sayı akışları üretmek için coroutine olan
std::generator
2 yorum
Görünüşe göre ağ standardıyla ilgili hâlâ bir haber yok.
Bir sonraki standartta da;; belirsiz olmayacak mı diye düşünüyorum