13 puan yazan xguru 2023-07-13 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
carnoxen 2023-07-13

Görünüşe göre ağ standardıyla ilgili hâlâ bir haber yok.

 
penza1 2023-07-20

Bir sonraki standartta da;; belirsiz olmayacak mı diye düşünüyorum