C++26 bir sonraki büyük C++ standardı olacak

Adanali

Active member
C++26 bir sonraki büyük C++ standardı olacak


  1. C++26 bir sonraki büyük C++ standardı olacak

C++26'nın önemini göstermek için öncelikle C++ standartlarını tarihsel bağlama yerleştirdim. Bu, C++ geliştirmedeki bir sonraki adımı göstermektedir.


Duyuru








Rainer Grimm uzun yıllardır yazılım mimarı, ekip ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanıyor, aynı zamanda özel konferanslarda sık sık konuşmaktan da hoşlanıyor. Modern C++ adlı blogunda C++ tutkusunu yoğun bir şekilde ele alıyor.













C++ standartları


C++ 40 yaşın üzerindedir. Dil son yıllarda nasıl gelişti? İşte C++26 ile biten basitleştirilmiş bir cevap.

C++98


1980'lerin sonlarında Bjarne Stroustrup ve Margaret A. Ellis ünlü kitapları “Annotated C++ Reference Manual (ARM)”ı yazdılar. Bu kitap iki amaca hizmet etti. İlk olarak birçok bağımsız C++ uygulaması vardı. Kitap daha sonra C++'ın işlevselliğini tanımlıyor. İkincisi, ARM ilk C++ standardının temeliydi: C++98 (ISO/IEC 14882). C++98'in bazı temel özellikleri vardı: şablonlar, kapsayıcıları ve algoritmalarıyla birlikte Standart Şablon Kitaplığı (STL), dizeler ve IO akışları.

C++03


C++03 (14882:2003) ile C++98 o kadar küçük bir teknik düzeltme aldı ki zaman çizelgemde görünmedi. Toplulukta, C++98'i içeren C++03, eski C++ olarak anılır.

TR1


2005 yılında heyecan verici bir şey oldu: Teknik Rapor 1 (TR1) yayınlandı. TR1, C++11'e ve ardından Modern C++'a doğru büyük bir adımdı. TR1 (TR 19768), C++ Standartlar Komitesi üyeleri tarafından kurulan Boost projesine dayanmaktadır. TR1'de bir sonraki C++ standardının parçası olması beklenen 13 kütüphane bulunmaktadır. Bunlar düzenli ifade kitaplığını, rastgele sayı kitaplığını, akıllı işaretçileri içerir. std::shared_ptr ve karma tabloları. Yalnızca özel matematiksel işlevler olarak adlandırılan işlevlerin C++17'ye kadar beklemesi gerekiyordu.

C++11

C++11 bir sonraki C++ standardıdır, ancak biz buna Modern C++ diyoruz. Bu ad aynı zamanda C++14 ve C++17'yi de içerir. C++11, C++ programlama şeklimizi temelden değiştiren birçok özelliğe sahiptir. Örneğin, C++11, TR1'in bileşenlerini getirdi ancak aynı zamanda anlambilimi, mükemmel iletmeyi, değişken kalıpları veya constexpr'i de hareket ettirdi. Ama hepsi bu değil. C++ 11 ile iş parçacığının ve iş parçacığı API'sinin temel temeli olarak bir bellek modeline sahip olduk. Bellek modeli ve çoklu iş parçacığıyla ilgili genel makalelerimde daha fazlası var.

C++14


C++14 küçük bir C++ standardıdır. Okuma-yazma kilitleri, genelleştirilmiş ve genelleştirilmiş lambdalar getirdi constexpr-Fonksiyonlar.

C++17


C++17 ne büyük ne de küçük. İki olağanüstü özelliği vardır: paralel STL ve standartlaştırılmış dosya sistemi. Yürütme politikası adı verilen bir politikayı kullanarak yaklaşık 80 STL algoritmasını yürütmek mümkündür. Bu bir çağrı anlamına gelir std::sort(std::execute::par, vec.begin(), vec.end()) C++ uygulamasına ilişkin bir not konteynerdir vec paralel olarak sipariş vermek. Ayrıca sıralamanın sıralı olduğunu belirtmek de mümkündür (std::execution::seq) veya vektörleştirilmiş (std::execution::par_unseq) yapılmalıdır. C++11'de olduğu gibi güçlendirme C++17'de de oldukça etkiliydi. Boost dosya sistemine ve üç yeni veri türüne sahibiz std::eek:ptional, std::variant VE std::any devraldı.

İşte C++17 ile ilgili makalelerim.

C++20


C++20, C++ programlama şeklimizi C++11 kadar temelden değiştirdi. Bu özellikle dört ana alan için geçerlidir: Aralıklar, Eşyordamlar, Kavramlar ve Modüller.

Ranges kütüphanesi, algoritmaları doğrudan kapsayıcı üzerinde ifade etmenize, boru sembolünü kullanarak algoritmayı oluşturmanıza ve bunları sonsuz veri akışlarına uygulamanıza olanak tanır.

Eşyordamlar sayesinde C++'ta eşzamansız programlama ana akım haline gelebilir. Eşyordamlar işbirlikçi faaliyetlerin, olay döngülerinin, sonsuz veri akışlarının veya boru hatlarının temelini oluşturur.

Kavramlar, modelleri programlama şeklimizi değiştirecek. Bunlar geçerli model argümanları için anlamsal kategorilerdir. Niyetinizi doğrudan sistem veri türünde ifade etmenize olanak tanır. Bir şeyler ters giderse kısa bir hata mesajı alırsınız.

Modüller başlık dosyalarının sınırlamalarının üstesinden gelecektir. Çok şey vaat ediyorlar. Örneğin önişlemci gereksiz hale gelir. Ayrıca eninde sonunda daha hızlı derleme sürelerine ve paket oluşturmanın daha kolay bir yoluna sahip olacağız.

Bireysel yeniliklerle ilgili ayrıntıları Aralıklar, Eşyordamlar, Konseptler, Modüller ve C++20 hakkındaki makalelerimde bulabilirsiniz.

C++23


Şu anda (Ağustos 2024) C++23 teknik olarak hazır ve son onayı bekliyor.

C++23 indirimli teklifler this çekirdek dilin küçük ama etkili bir özelliği. Çıkarım this Python'a benzer şekilde örtülü geçişe izin verir this– Bir üye fonksiyonunun tanımında belirtilecek işaretçiler. Tümdengelim sayesinde C++'taki CRTP veya modelin aşırı yüklenmesi gibi bazı karmaşık teknikler çocuk oyuncağı haline gelir.

C++23 kütüphanesine birçok etkili ekleme yapılacak. Standart kütüphaneyi doğrudan kullanabilirsiniz import std; içe veya C++20 biçimlendirme dizesini içe aktarın std::print VE std::println için başvurun. Ayrıca performans nedenlerinden dolayı aşağıdaki gibi düz ilişkisel kapsayıcılar kullanacağız: std::flat_map almak. Yeni veri türü std::expected zaten ş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. Ve nihayet öyle std::generator bir sayı akışı oluşturan ilk somut eşyordam. std::generator ranges kütüphanesinin bir parçasıdır ve C++23'te de geliştirilmiştir.

Bununla ilgili daha fazla bilgiyi C++23 ile ilgili makalelerimde bulabilirsiniz.

C++26


C++26 üzerindeki çalışmalar 2023'ün 2. çeyreğinde başladı ve Dondur özelliğiyle 2025'in 1. çeyreğinde tamamlanacak. Ağustos 2024'te C++26 en az üç ana özelliği içerecektir: Yansıma, Sözleşmeler ve std::execution.

Refleks bir programın kendi yapısını ve davranışını inceleme, analiz etme ve değiştirme yeteneğidir. Bu, C++'ta derleme zamanı programlamayı çok daha güçlü hale getirir.

A Sözleşme Yazılım bileşenleri için arayüzleri hassas ve doğrulanabilir şekilde tanımlar. Bu yazılım bileşenleri ön koşulları, son koşulları ve değişmezleri karşılayan işlevlerdir.

std::executionönceden Yürütücü veya Gönderen/Alıcı olarak bilinen, “genel yürütme kaynaklarında (P2300R10) eşzamansız yürütmeyi yönetmek için standart bir C++ çerçevesi sağlar.

Bir sonraki adım nedir?


Bir sonraki yazımda C++26'nın özelliklerine genel bir bakış sunacağım.


(Ben)
 
Üst