C++ adalah bahasa pemrograman yang dirancang untuk perangkat lunak yang menuntut pengendalian penuh atas perangkat keras dan performa yang tinggi. Topik ini menelusuri asal usul C++ sejak tahun 1985, ciri utama yang membedakan bahasa ini dari bahasa lain, wilayah penggunaannya yang paling menonjol, serta perkembangan standarnya sampai versi terkini. Setelah membaca topik ini, gambaran mengenai alasan C++ masih dipilih untuk mesin game, browser, sistem perdagangan berfrekuensi tinggi, dan perangkat embedded sudah terbentuk.
Sejarah singkat C++#
C++ bermula dari proyek riset yang dijalankan Bjarne Stroustrup di Bell Labs pada tahun 1979. Bahasa perantara yang dirancangnya saat itu bernama C with Classes, yaitu bahasa C yang diperluas dengan kelas (class) sebagai sarana mengelompokkan data dan perilaku. Nama C++ mulai dipakai pada tahun 1983 sebagai permainan kata dari operator penambahan pada C, karena bahasa ini diposisikan sebagai penyempurnaan atas C. Rilis publik pertama C++ terjadi pada tahun 1985, bersamaan dengan terbitnya edisi pertama buku The C++ Programming Language yang ditulis Stroustrup sendiri.
Standarisasi resmi menyusul pada tahun 1998 melalui dokumen ISO/IEC 14882 yang dikenal sebagai C++98. Revisi berikutnya berlangsung bertahap, dengan C++11 sebagai lompatan terbesar yang memperkenalkan banyak fitur baru dan menandai awal era C++ modern. Sejak C++11, komite standardisasi ISO menerbitkan revisi baru secara rutin setiap tiga tahun, yaitu C++14, C++17, C++20, dan C++23. Setiap revisi menambah fitur dan memperbaiki kelemahan tanpa membatalkan kode lama, sehingga program yang ditulis untuk C++98 masih dapat dikompilasi oleh compiler modern.
Ciri utama bahasa#
Tiga ciri menentukan karakter C++, yaitu kompilasi ke kode mesin (machine code), pengetikan statis, dan dukungan atas beberapa paradigma sekaligus. Sebuah compiler, yaitu program yang menerjemahkan kode sumber menjadi kode mesin, mengubah kode C++ menjadi instruksi yang dijalankan langsung oleh prosesor. Tidak ada interpreter, yaitu program yang menerjemahkan dan menjalankan kode sumber sekaligus, yang ikut berjalan saat program C++ dieksekusi. Pengetikan statis (statically typed) berarti tipe setiap variabel diperiksa saat kompilasi, sehingga kesalahan tipe tertangkap sebelum program berjalan. Pemeriksaan itu menuntut sedikit usaha ekstra saat menulis kode, tetapi memberi kepastian tipe yang menjadi dasar optimasi compiler.
Dukungan multiparadigma membuat C++ tidak memaksakan satu gaya penulisan. Fungsi bebas melayani gaya prosedural, kelas melayani pemrograman berorientasi objek, template melayani pemrograman generik, dan lambda melayani gaya fungsional. Pustaka standarnya, yang sering disebut STL (Standard Template Library), menyediakan container, algoritma, dan utilitas I/O. Kombinasi ciri-ciri tersebut membuat C++ dapat dipakai dari kode tingkat rendah yang berinteraksi langsung dengan perangkat keras sampai abstraksi tingkat tinggi yang mudah dibaca.
Wilayah penggunaan C++#
Wilayah penggunaan C++ terkonsentrasi pada perangkat lunak yang sensitif terhadap waktu dan memori. Tabel berikut merangkum empat wilayah utamanya beserta alasannya.
| Wilayah | Alasan C++ dipilih |
|---|---|
| Mesin game | Perhitungan grafis dan simulasi harus selesai dalam waktu frame yang sangat pendek, sehingga pengendalian memori dan prediktabilitas performa menjadi mutlak. |
| Browser | Mesin perender memproses halaman yang kompleks setiap saat, dan kecepatan eksekusi C++ menjaga respons halaman tetap lancar. |
| Perdagangan berfrekuensi tinggi | Keputusan beli dan jual harus dikirim dalam hitungan mikrodetik, sehingga setiap jeda yang tidak perlu bernilai rugi. |
| Perangkat embedded | Memori dan daya komputasi terbatas, sehingga program harus kecil dan berjalan tanpa runtime besar. |
Pada mesin game, C++ menjadi bahasa inti karena mesin perlu mengendalikan alokasi memori, penjadwalan tugas, dan komunikasi dengan perangkat grafis tanpa lapisan perantara. Pada browser, komponen yang paling sering dipanggil seperti pengurai HTML dan mesin JavaScript ditulis dalam C++ karena dipanggil jutaan kali selama pemakaian. Pada sistem perdagangan berfrekuensi tinggi (high-frequency trading), latensi diukur dalam mikrodetik, sehingga jeda pembersihan memori otomatis yang lazim di bahasa lain harus dihindari. Pada perangkat embedded, C++ menawarkan abstraksi tanpa runtime besar, sehingga mikrokontroler dengan memori beberapa puluh kilobyte pun dapat memakainya. Selain empat wilayah tersebut, C++ juga menghidupkan sistem operasi, basis data, dan compiler lain, yang menegaskan perannya sebagai bahasa fondasi.
Standarisasi dan versi bahasa#
Setiap revisi standar C++ membawa fitur baru yang diaktifkan lewat pilihan compiler. Komite ISO yang mengurusi standar tersebut bernama WG21, dan hasil kerjanya diterbitkan sebagai dokumen ISO/IEC 14882 pada setiap revisi. Proses ini menjaga keseimbangan yang sulit, yaitu menambah fitur modern tanpa merusak kode yang sudah berjalan bertahun-tahun. Karena itulah C++ jarang menghapus fitur lama, dan gaya penulisan C++ era 1990-an masih dapat ditemukan di kode produksi sampai sekarang.
Compiler melaporkan versi standar yang sedang diaktifkan melalui makro
__cplusplus. Nilainya berubah sesuai pilihan standar yang dipakai saat
kompilasi, seperti dirangkum pada tabel berikut.
Nilai __cplusplus | Standar |
|---|---|
| 199711L | C++98 dan C++03 |
| 201103L | C++11 |
| 201402L | C++14 |
| 201703L | C++17 |
| 202002L | C++20 |
| 202302L | C++23 |
Program berikut membaca makro tersebut dan mencetak nilainya. Pada compiler g++ 14 yang dijalankan dengan pilihan bawaan, nilai yang muncul adalah 201703 karena standar bawaannya adalah gnu++17.
#include <iostream>
int main() {
std::cout << "Makro __cplusplus bernilai: " << __cplusplus << '\n';
return 0;
}Makro __cplusplus bernilai: 201703Nilai yang dicetak dapat bergeser bila compiler dijalankan dengan opsi
-std yang lain, misalnya 202002 pada standar C++20. Pemeriksaan kecil
semacam ini berguna untuk memastikan kode yang bergantung pada fitur versi
tertentu benar-benar dikompilasi dengan standar yang dimaksud. Kebiasaan
memeriksa nilai makro ini juga mempercepat diagnosis ketika sebuah program
menolak dikompilasi karena fitur yang dibutuhkannya belum diaktifkan.
Kesalahan umum#
- C++ dianggap superset mutlak dari C. Sebagian besar program C memang
dapat dikompilasi sebagai C++, tetapi keduanya bukan bahasa yang identik.
Konversi implisit dari
void*yang sah di C ditolak oleh C++, dan beberapa konstanta karakter memiliki tipe yang berbeda. Penyebabnya adalah kemiripan sintaks yang membuat keduanya terlihat sama. Perbaikannya berupa pengakuan bahwa C++ memiliki aturan sendiri, sehingga kode C yang ingin dipakai di C++ tetap perlu disesuaikan dan diuji ulang. - Materi tutorial lama dianggap mutakhir. Banyak tutorial memakai gaya
C++98, misalnya pointer mentah dan pemanggilan
new/deleteuntuk setiap alokasi, tanpa menyebut alternatif modernnya. Penyebabnya adalah kelimpahan materi lama yang sebagian masih relevan. Perbaikannya berupa pemilihan sumber belajar yang menyebut versi standarnya secara eksplisit dan memakai gaya C++11 ke atas, sebagaimana yang dipraktikkan sepanjang jalur ini.
Ringkasan#
- C++ dirancang oleh Bjarne Stroustrup, dirilis publik pada tahun 1985, dan distandardisasi ISO sejak C++98 dengan revisi tiga tahunan sampai C++23.
- Bahasa ini dikompilasi ke kode mesin, bertipe statis, dan mendukung paradigma prosedural, berorientasi objek, generik, dan fungsional.
- Wilayah penggunaan utamanya adalah mesin game, browser, sistem perdagangan berfrekuensi tinggi, dan perangkat embedded, semuanya karena kebutuhan performa dan pengendalian memori.
- Makro
__cplusplusmelaporkan versi standar yang diaktifkan compiler, misalnya 201703 untuk C++17.
Referensi#
- History of C++ — cppreference — kronologi revisi standar C++ beserta fitur utamanya.
- The Standard — Standard C++ Foundation — status standardisasi ISO untuk C++ beserta tautan dokumennya.
- Introduction to C++ development — Learn C++ — gambaran tahapan pengembangan program C++ dari kode sumber sampai program yang berjalan.