- Standar C++ generasi berikutnya setelah C++20
- Bukan game changer seperti C++98, C++11, atau C++20, melainkan perubahan kecil setingkat C++17
Menelusuri perubahan standar C++ (selama 40 tahun)
C++98
- Pada akhir 1980-an, Bjarne Stroustrup dan Margaret A. Ellis menulis buku terkenal Annotated C++ Reference Manual (ARM)
- Tujuan buku ini ada dua
- Karena ada terlalu banyak implementasi C++ independen, ARM mendefinisikan fitur-fitur C++
- Menjadi dasar bagi standar C++, yaitu C++98 (ISO/IEC 14882)
- C++98 mencakup beberapa fitur penting
- Templates
- STL(Standard Template Library): mencakup container, algoritme, string, dan IO stream
C++03
- C++03 (14882:2003) hanya membawa revisi teknis yang sangat kecil
- Di komunitas, C++03 bersama C++98 sering disebut sebagai "Legacy C++"
TR1
- Pada 2005, ada perkembangan menarik. TR1(Technical Report 1) diterbitkan
- TR1 merupakan langkah besar menuju C++11 sekaligus langkah awal menuju Modern C++
- Berbasis pada proyek Boost dari para anggota komite standar C++
- Mencakup 13 library yang akan masuk ke standar C++ generasi berikutnya (regular expression, bilangan acak, smart pointer seperti
std::shard_ptr, hash table, dll.)
C++11
- Ini adalah standar C++ berikutnya, tetapi kita menyebutnya Modern C++. Nama ini juga mencakup C++14 dan C++17
- C++11 benar-benar mengubah cara kita mengembangkan C++
- Selain komponen TR1, C++11 juga membawa move semantic, perfect forwarding, variadic templates, constexpr, dan lainnya
- Termasuk model memori berbasis threading dan Threading API
C++14
- Standar C++ yang kecil. Memperkenalkan read-writer locks, generalized lambdas, dan fungsi constexpr
C++17
- Tidak terlalu besar, tapi juga tidak kecil
- Mencakup dua fitur yang menonjol: Parallel STL dan filesystem yang distandardisasi
- Sekitar 80 algoritme STL bisa dijalankan melalui execution policy (paralel, sekuensial, vektor)
- Sangat dipengaruhi oleh Boost. Termasuk filesystem dan tiga tipe data (
std::optional, std::variant, std::any)
C++20
- Seperti C++11, C++20 juga mengubah cara kita melakukan pemrograman C++
- Khususnya empat hal besar
- Ranges: dengan library Ranges, kita bisa mengekspresikan algoritme langsung pada container dan menggabungkan algoritme dengan simbol pipe untuk diterapkan pada aliran data tak terbatas
- Coroutines: membuat pemrograman asinkron menjadi arus utama di C++. Menjadi fondasi untuk cooperative task, event loop, aliran data tak terbatas, dan pipeline
- Concepts: mengubah cara kita memikirkan dan memprogram template. Memungkinkan pemberian constraint pada parameter template, pemeriksaan tipe, dan verifikasi saat kompilasi
- Modules: membantu melampaui keterbatasan header file. Menjanjikan banyak hal; misalnya tidak lagi memerlukan preprocessor, pada akhirnya mengurangi waktu build dan mempermudah membangun package
C++23
- Per Juli 2023, C++23 sedang menunggu pemungutan suara final
- Menambahkan fitur kecil tetapi sangat berpengaruh pada bahasa itu sendiri, yaitu "Deducing this"
- Mirip seperti di Python, pointer
this yang secara implisit diteruskan ke member function dapat dibuat eksplisit
- Ini mempermudah implementasi teknik kompleks seperti CRTP(Curiously Recurring Template Pattern) atau pola Overload
- Ada juga tambahan penting di library C++23
- Bisa langsung mengimpor standard library dengan
import std;, atau memakai format string C++20 di std:print dan std:println
std::flat_map sebagai pengganti std::map yang lebih baik dari sisi performa
- Antarmuka
std::optional diperluas menjadi antarmuka monadik demi composability
- Tipe data baru
std::expected
- Span multidimensi
std::mdspan
- Coroutine
std::generator untuk menghasilkan aliran angka
2 komentar
Sepertinya masih belum ada kabar soal standar networking.
Bahkan untuk standar berikutnya pun;; sepertinya tidak akan pasti, ya.