C++23: Yeni C++ standardı hazır

Adanali

Active member
C++23: Yeni C++ standardı hazır


  1. C++23: Yeni C++ standardı hazır

Bir sonraki C++ standardı olan C++23, programlama dilini önemli ölçüde geliştirirken, C++98, C++11 veya C++20’den daha az devrim niteliğindedir. Yeni standart daha çok C++17 geleneğindedir.

Duyuru








Rainer Grimm, uzun yıllardır yazılım mimarı, ekip lideri ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanır, aynı zamanda sık sık uzmanlık konferanslarında konuşmaktan da keyif alır. Modernes C++ blogunda yoğun bir şekilde C++ tutkusundan bahsediyor.













C++ standartları

C++98


80’lerin sonunda birkaç bağımsız C++ uygulaması vardı. Bu nedenle, 1989’da Bjarne Stroustrup ve Margaret A. Ellis, “The Annotated C++ Reference Manual” (ARM C++) adlı kitaplarında C++’ın işlevselliğini tanımladılar. Ek olarak, ARM C++ ikinci bir önemli görevi yerine getirdi. İlk ISO C++ standardı olan ISO/IEC 14882:1998’in (C++98) temelini oluşturdu. C++98’in çok önemli özellikleri vardır: şablonlar, kapsayıcıları ve algoritmaları ile Standart Şablon Kitaplığı (STL), IO dizeleri ve akışları.

C++03


C++03 (ISO/IEC 14882:2003) ile C++98 o kadar küçük bir teknik düzeltme aldı ki, bunu zaman çizelgeme dahil etmiyorum. Toplulukta, C++98’i içeren C++03, basitçe Legacy C++ olarak adlandırılır.

Duyuru

TR1


Resmi bir standart olmasa da, Teknik Rapor 1 (TR1), resmi C++11 standardına dahil edilmiş birçok bileşeni açıklar. Normal ifadeler, akıllı işaretçiler, hash tabloları veya rasgele sayı üreteçleri için yeni kitaplıkların tümü TR1’i ve dolayısıyla karşılık gelen Boost kitaplıklarını temel alır. C++ Standardizasyon Komitesi üyeleri tarafından kurulan Boost projesi, mevcut C++ kitaplık uzantıları için tam da düşünce kuruluşudur. TR1, 13 kitaplık içeriyordu. Yalnızca özel matematik işlevleri C++17’ye kadar beklemek zorundaydı.

C++11


C++11, sonraki C++ standardı anlamına gelir. Biz buna sadece Modern C++ diyoruz. Bu ad ayrıca C++14 ve C++17’nin kısaltmasıdır. C++11, C++ programlama şeklimizi temelden değiştiren birçok özelliğe sahiptir. Örneğin, C++11, TR1 bileşenlerini içerir, ancak aynı zamanda hareket semantiği, mükemmel iletme, variadik, lambda veya constexpr kalıplarını içerir. Hepsi bu kadar değil: C++11 ile C++, eş zamanlılığın temel temeli olarak bir bellek modeline ve çok iş parçacıklı bir arabirime sahiptir. Merak ediyorsanız, bellek modelleme ve çoklu kullanım hakkındaki makalelerim burada.

C++14


C++14 küçük bir standarttır. Bununla okuma-yazma blokları, genelleştirilmiş lambda ifadeleri ve genelleştirilmiş constexpr işlevleri C++’a eklenmiştir.

C++17


C++17 ne büyük ne de küçük. Bu standardın öne çıkan iki özelliği vardır: paralel STL ve dosya sistemi kitaplığı. Yürütme ilkesi olarak bilinen yöntemle artık 80’den fazla STL algoritması yürütülebilir. Yani, forma bir çağrı std::sort(std::execute::par, vec.begin(), vec.end()) paralel sıralama için C++ uygulamasına yönelik bir ipucudur. Ek olarak, sıralamanın sıralı olup olmayacağını belirleyebilirsiniz (std::execute::seq) veya vektörleştirilmiş (std::execute::par_unseq) çalıştırılmalıdır. C++11’e karşılık gelen Boost, bu C++ standardı üzerinde çok güçlü bir etkiye sahiptir. Boost, C++’a bir dosya sistemi ve yeni veri türleri ekledi std::eek:ptional, std::variant VE std::any. Bunlar C++ 17 ile ilgili makalelerim.

C++20


C++20, C++11’e benzer şekilde C++’ı programlama şeklimizi temelden değiştirir. Bu özellikle büyük dörtlü için geçerlidir: aralıklar, eşyordamlar, kavramlar ve modüller.

Aralıklar kitaplığı, Standart Şablon Kitaplığının algoritmalarının doğrudan kaba uygulanmasına, bunların sonsuz veri akışlarında tanımlanmasına ve Unix kabuğundan bilinen boru operatörüyle bağlantıya izin verir.

C++20 eşyordamlarla eşzamansız programlamayı destekler. Böylece, işbirlikçi çoklu görev, sonsuz veri akışları, olay döngüleri ve işlem hatları C++20’de zarif bir şekilde uygulanabilir.

Kavramlar, izin verilen veri türleri kümesi için anlamsal kategorileri tanımlamak için kullanılabilen C++ kalıplarının bir uzantısıdır. Concepts sayesinde, şablonları uygulamak ve tanımlamak çok daha kolay ve daha anlamlı.

Modüller, başlık dosyalarına göre önemli bir gelişmedir ve birçok iyileştirme vaat eder: önişlemci komutlarından (makrolardan) kurtulma, daha iyi derleme süreleri elde etme ve daha kolay paketleme.

Aralıklar, eşyordamlar, kavramlar, modüller ve C++20 hakkındaki makalelerim.

C++23


Şu anda (Temmuz 2023) C++23’ün içeriği tamamlandı ve kalıcı olarak onaylanması gerekiyor.

Bunu Çıkararak C++23, çekirdek dile küçük ama çok etkili bir uzantı sunar. Yenilik, Python’a benzer şekilde, örtülü anahtarlamaya izin verir. this– Bir üye işlev tanımında işaretçileri açık hale getirin. Sonuç Çıkarma sayesinde, CRTP (Curiously Recurring Template Pattern) veya Overload Pattern gibi C++’daki bazı karmaşık teknikler çocuk oyuncağı haline geldi.

C++23 kitaplığı birçok önemli ekleme görecek. Daha sonra standart kitaplık doğrudan ile kullanılabilir import std; içe aktarın veya C++20 biçim belirtimini doğrudan std::print VE std::println kullanım. Ayrıca, performans nedenleriyle, aşağıdaki gibi düz ilişkisel kaplar elde ederiz: std::flat_map.Sonuncusu yerine kullanılabilir std::map sokmak. arayüz std::eek:ptional şekillendirilebilirlik nedenleriyle monadik bir arayüzle genişletilir. yeni veri türü std::expected hali hazırda şekillendirilebilir bir arayüze sahiptir ve hata işleme için beklenen veya beklenmeyen bir değeri saklayabilir. Sayesinde std::mdspan çok boyutlu bir aralık elde ederiz. Sonunda öyle std::generator bir sayı akışı oluşturmak için ilk somut rutin. std::generator C++23’te büyük ölçüde genişletilmiş olan ranges kitaplığının bir parçasıdır.

Sıradaki ne?


Bir sonraki yazımda, C++23 yolculuğuma Deducing This ile başlayacağım. Çıkarım Bu, C++’da küçük ama önemli bir gelişmedir.

Danışmanlık programlarımı tanıtıyorum (“C++20: Ayrıntıları Alın” dahil)










Mentorluk programlarımı bir saat içinde sunmaktan mutluluk duyuyorum

Tamamlamak

  • Ne zaman: 12 Temmuz 2023, 09:00 – 10:00 (Orta Avrupa Saati; UTC +02:00)
  • Sunum için kaydolun: E-posta ile kaydolun
  • Davet bağlantınızı alın: 11 Temmuz

(rm)



Haberin Sonu
 
Üst