- C++26 resmi selesai secara teknis. Empat fitur inti yang disertakan adalah reflection, penguatan keamanan memori, Contracts, std::execution
- Compile-time reflection adalah mesin abstraksi paling kuat dalam sejarah C++ sejak template diperkenalkan, memungkinkan bahasa mendeskripsikan dirinya sendiri dan menghasilkan kode
- Dengan hanya melakukan recompilation kode C++ yang ada ke C++26, undefined behavior (UB) akibat variabel lokal yang belum diinisialisasi dapat dihapus, dan bounds safety dijamin melalui standard library yang diperkuat
- Dari hasil deployment di Google, terukur adanya lebih dari 1.000 bug diperbaiki serta penurunan segfault sebesar 30% di lingkungan produksi
- Diperkirakan adopsi cepat oleh implementasi compiler, karena GCC sudah menggabungkan reflection dan Contracts ke trunk
C++26 rampung: rilis terpenting sejak C++11
- Pada rapat komite ISO C++ yang diadakan di Croydon, London, Inggris, pekerjaan teknis C++26 akhirnya selesai
- Sekitar 210 peserta hadir (130 tatap muka, 80 jarak jauh via Zoom), dengan perwakilan resmi dari 24 negara
- Sebagian besar rapat digunakan untuk menangani 411 komentar internasional (tahap CD) yang masuk pada musim panas
- Fokusnya pada penyempurnaan akhir (fit-and-finish), tanpa penambahan atau penghapusan fitur baru
- C++26 yang dirampungkan pada rapat ini kini memasuki tahap penyusunan dokumen final untuk pemungutan suara persetujuan internasional (DIS)
4 fitur inti C++26
(1) Reflection
- Ini adalah upgrade terbesar dalam sejarah pengembangan C++ sejak penemuan template, berupa kemampuan bahasa untuk mendeskripsikan dirinya sendiri dan menghasilkan kode
- Pada Juni 2025, komite C++ memasukkan compile-time reflection ke draf C++26, menandai titik balik dalam sejarah bahasa ini
- Fitur ini diperkenalkan sebagai "mesin baru paling kuat untuk mengekspresikan abstraksi yang efisien, dan butuh 10 tahun ke depan untuk benar-benar menemukan apa saja yang bisa dilakukan roket ini"
(2) Penguatan keamanan memori
- Dengan hanya melakukan recompilation, seluruh kategori UB karena pembacaan variabel lokal yang belum diinisialisasi pada kode C++ lama dihapus di C++26
- Hardened Standard Library distandardisasi untuk menjamin bounds safety pada tipe utama seperti vector, span, string, dan string_view
- Overhead performa terukur rata-rata hanya 0,3% (di bawah 1%)
- Sudah dideploy pada ratusan juta baris kode di platform Apple dan layanan Google
- Hasil deployment di Google:
- Lebih dari 1.000 bug telah diperbaiki
- Diperkirakan dapat mencegah 1.000–2.000 bug per tahun
- Tingkat kejadian segfault turun 30% di seluruh produksi
- Dari seluruh basis kode C++ Google, hanya 5 layanan yang melakukan opt-out penuh, dan hanya ada 7 lokasi yang memakai API akses tidak aman
(3) Contracts: pre, post, contract_assert
- C++26 memperkenalkan fitur kontrak di level bahasa — mendukung precondition, postcondition, dan assertion untuk deklarasi fungsi
- Dinilai jauh lebih kuat daripada macro
assert milik C
- Hasil voting adopsi Contracts:
- Februari 2025 (merge ke working draft): 100 setuju, 14 menolak, 12 abstain
- Maret 2026 (penetapan final C++26): 114 setuju, 12 menolak, 3 abstain
- Meski sejumlah pakar komite masih memiliki kekhawatiran teknis, topik ini telah dibahas cukup dalam lewat tiga rapat dan banyak panggilan konferensi
- Sebelum rapat November 2025, umpan balik sudah tercermin lewat perbaikan 2 bug pada spesifikasi Contracts
(4) std::execution (Sender/Receiver)
- Ini adalah model asinkron C++ berupa framework terpadu untuk mengekspresikan dan mengendalikan konkurensi serta paralelisme
- Memiliki karakteristik aman karena memudahkan penulisan structured concurrency (konkurensi dengan siklus hidup yang tersarang secara ketat), sehingga data race dapat dicegah secara struktural
- Perhatian: dokumentasinya saat ini masih kurang, dan library "fingers-and-toes" belum memadai sehingga tingkat adopsinya lebih sulit dibanding fitur C++ lainnya
- Mungkin diperlukan bantuan dari pakar yang sudah sangat memahami fitur ini serta penulisan adapter library untuk integrasi dengan kode asinkron yang sudah ada
Mengapa C++26 diperkirakan akan cepat diadopsi
- Ini adalah kumpulan fitur yang paling banyak dibutuhkan sejak C++11, karena mencakup reflection dan peningkatan safety yang kemungkinan dipakai sehari-hari oleh mayoritas developer C++
- Parallel STL, concepts, coroutines, dan modules pada C++17, C++20, dan C++23 dinilai tidak memberi dampak seluas C++11 bagi semua developer C++
- GCC dan Clang sepanjang pengembangan C++26 telah mempertahankan status pra-implementasi untuk dua pertiga fitur
- GCC sudah menggabungkan reflection dan Contracts ke trunk, tinggal menunggu rilis
Pekerjaan C++29 dimulai: pendalaman keamanan memori
- Pada rapat kali ini, jadwal C++29 juga diadopsi, mempertahankan siklus rilis 3 tahunan
- Fokus utama C++29 dipastikan pada penguatan tambahan untuk type safety dan memory safety
- Berbagai usulan untuk mengurangi undefined behavior (UB) lebih lanjut sedang ditinjau
- Di SG23 (subgrup safety dan security), pekerjaan sedang berjalan berdasarkan profil type safety P3984 milik Bjarne Stroustrup serta framework profil umum dari Gabriel Dos Reis
- Oliver Hunt dari Apple mempresentasikan P4158R0 "C++ Subsetting and Restriction for Memory Safety"
- Pendekatan subset-of-superset diterapkan pada lebih dari 4 juta baris kode WebKit
- Dilaporkan bahwa pendekatan ini "memblokir banyak kelas kerentanan, dan kebijakan saat ini kemungkinan besar akan mencegah sebagian besar exploit di masa lalu"
- Topik keamanan memori dibahas mendalam pada sesi Rabu malam yang dihadiri mayoritas komite dan pada sesi khusus EWG Jumat sore yang dihadiri sekitar 90 orang
- Library quantities and units (P3045R7 "Quantities and units library") maju dari SG6 dan SG18 ke LEWG (subgrup evolusi library utama)
Jadwal berikutnya
- Dua rapat berikutnya dijadwalkan di Brno, Ceko (Juni) dan Buzios, Rio de Janeiro, Brasil (November)
- Pada kedua rapat tersebut, pekerjaan penambahan fitur ke working draft C++29 akan dimulai
- Mulai sekarang hingga sebelum rapat berikutnya, banyak telekonferensi subgrup sudah masuk dalam jadwal
6 komentar
C++26 selesai! — Upgrade terbesar sejak C++11, dengan refleksi dan peningkatan keamanan memori yang resmi ditetapkan
Pendapat Hacker News
Sangat disayangkan fitur Contracts diadopsi ke dalam standar C++
Rasanya seperti menambah kompleksitas lagi ke bahasa yang kompleksitasnya sudah mencapai batas
Bahkan Bjarne Stroustrup menyebut fitur ini sebagai “desain yang belum matang dan digembungkan ala komite”
Menurut saya, fitur ini juga punya banyak potensi bahaya (footgun), jadi sulit dibenarkan
Tapi tidak ada yang tertarik
Materinya ada di sini
Seperti di Ada atau Rust, ini adalah elemen inti untuk integrasi dengan verifikasi formal (proof assistant) agar verifikasi statis bisa menggantikan pengujian
Ada Spark layak dijadikan rujukan
Contoh pertama di dokumentasi cppreference justru merupakan kasus pengecualian yang mengubah state
Sintaksnya juga tidak intuitif
Misalnya bentuk seperti
asserts_pre(num >= 0)akan jauh lebih jelas daripadapre(num >= 0)Tapi tampaknya keringkasan lebih diprioritaskan
Jadi bukan menambah kompleksitas, melainkan menyatukan berbagai implementasi masing-masing agar interoperabilitas lebih baik
Justru fitur seperti Reflection yang menurut saya lebih menambah kompleksitas
Sebagai pengembang C# dan Java, saya penasaran
Saat ini aplikasi seperti apa yang dibuat dengan C++?
Saya jarang mendapat kesempatan mendengar masalah nyata apa yang sebenarnya diselesaikan dengan bahasa ini
Pendefinisian ulang “erroneous behavior” untuk variabel yang tidak diinisialisasi cukup menarik
Menurut dokumen standar, ini menimbulkan biaya runtime,
dan dengan atribut
[[indeterminate]]perilakunya bisa dikembalikan lagi menjadi undefined behaviorJika benar-benar ingin tidak menginisialisasi, harus ditulis eksplisit seperti
int x = void;Hampir tidak mungkin menulis itu secara tidak sengaja
[[indeterminate]]justru kembali ke UB (Undefined Behavior)Beberapa proyek mungkin tetap lebih memilih inisialisasi manual
[[indeterminate]]di kode terasa mengerikanPada akhirnya mereka akan membuang waktu untuk mencari artinya, atau lama-lama malah mengabaikannya
Ini mengingatkan saya pada pengalaman membaca kode Rust yang dipenuhi generic dan trait hingga sulit dipahami
Saya pernah bekerja di tim C++ Microsoft pada tahun 90-an
Saat itu saya mengira RTTI adalah batas tertinggi sistem reflection yang mungkin dimiliki C++
Kemajuan sekarang benar-benar mengejutkan
Mengadakan rapat di Croydon lalu tidak membiarkan siapa pun keluar sampai tanda tangan selesai adalah strategi yang cukup licik
Saya tidak ingin bekerja di sana lagi
Saya penasaran dengan status implementasi C++26 di GCC dan Clang
GCC sudah menggabungkan reflection dan contracts ke trunk, tetapi saya ingin tahu sejauh mana Clang sudah berjalan
sedangkan di halaman GCC ditandai “yes”
Ini sudah bisa dipakai di Compiler Explorer, dan digunakan untuk menambahkan reflection ke simdjson
Saya ragu perubahan pada sistem modul di standar kali ini benar-benar akan membuatnya lebih luas dipakai
Itulah alasan Cargo di Rust jauh mengungguli C++
Ketidakmampuan menambahkan dependensi hanya dengan satu baris
cargo addmembuat generasi baru menjauhJika CMake mengadopsi model kompilasi dua tahap milik Clang, kecepatan build akan meningkat drastis,
dan barulah modul benar-benar mulai diadopsi
Hampir tidak ada peluang untuk menjadi arus utama
Fitur baru terlalu banyak sehingga sulit diikuti
Sistem build juga berantakan, dan file header seharusnya sudah ditinggalkan
Ini agak di luar topik, tetapi ungkapan “London Croydon” terdengar aneh
Bukankah biasanya orang mengatakan “Croydon, London”?
Saat merencanakan perjalanan, membaca dari wilayah besar ke wilayah kecil terasa lebih alami
Alasan ditulis “London, Croydon” mungkin untuk memberi kesan “rapatnya di London”
“Croydon, London” justru terasa seperti “di Croydon pinggiran London”, jadi kurang keren — tafsiran setengah bercanda
Ada juga reaksi sinis seperti “rilisnya pas menjelang bahasa ini ditinggalkan”
Jika C++29 hanya fokus pada peningkatan kualitas dan penyempurnaan fitur yang sudah ada, sepertinya komunitas pun tidak akan terlalu keberatan
random()satu barisDaripada menambahkan fitur demi keamanan memori, kalau saja pointer menggantung atau referensi yang dapat diubah saja tidak diperbolehkan, keamanan memori sudah akan meningkat. Malah dengan menambah fitur, kompleksitas kode justru hanya makin tinggi.
Saya sudah susah payah beralih ke Rust, jadi cukup menggembirakan melihat banyak fitur yang saya tunggu akhirnya masuk ke rancangan standar C++26. Tapi saya tetap tidak akan kembali ke C++... haha
Untuk yang terkait packaging, tampaknya ada juga perkembangan dari sisi CMake..
https://www.kitware.com/common-package-specification-is-out-the-gate/
contractbenar-benar fitur yang sudah lama kutunggu, akhirnya juga