Setiap fitur C++ yang kita pakai hari ini adalah jawaban atas masalah nyata yang dihadapi programmer selama beberapa dekade. Memahami garis waktu perkembangannya membuat kita tidak sekadar menghafal sintaks, tetapi paham mengapa sebuah fitur diciptakan dan masalah apa yang diselesaikannya. Pada Chapter ini kita menelusuri perjalanan C++ dari eksperimen “C with Classes” di Bell Labs pada 1979 hingga standar C++26 yang selesai disusun pada Maret 2026. Di akhir chapter, kita akan mencetak garis waktu tersebut sebagai program kecil yang benar-benar berjalan.

Awal Mula: C with Classes #

Pada 1979, ilmuwan komputer asal Denmark, Bjarne Stroustrup, sedang mengerjakan software simulasi sistem telepon di Bell Labs. Pengalaman sebelumnya dengan bahasa Simula membantunya memodelkan sistem secara rapi, tetapi kompilernya terlalu lambat untuk proyek berskala besar. Sebaliknya, bahasa C sangat cepat dan dekat dengan perangkat keras, namun tidak menyediakan fasilitas abstraksi seperti class. Stroustrup kemudian menambahkan fitur class ala Simula ke atas C dan menamai bahasa baru tersebut “C with Classes”.

Tahun 1983, nama bahasa itu berubah menjadi C++, sebuah plesetan teknis dari operator increment ++ pada C: bahasa ini adalah generasi berikutnya dari C. Pada 1985, C++ dirilis ke publik bersama buku The C++ Programming Language edisi pertama yang ditulis Stroustrup sendiri. Fitur pembawanya sudah cukup lengkap untuk pemrograman berorientasi objek: class, inheritance, virtual function, dan operator overloading. Dari titik ini, adopsi C++ di industri software dan telekomunikasi tumbuh dengan cepat.

Standarisasi Internasional: C++98 dan C++03 #

Popularitas C++ membawa masalah baru: setiap vendor compiler menambahkan variasi sendiri sehingga kode yang sama bisa berperilaku berbeda antar compiler. Untuk mengatasinya, ISO menetapkan standar pertama C++ pada 1998 dengan nomor dokumen ISO/IEC 14882, lazim disebut C++98. Standar ini juga mengukuhkan Standard Template Library (STL) — kumpulan container, iterator, dan algorithm siap pakai — sebagai bagian resmi bahasa. Pada 2003, ISO menerbitkan C++03 yang isinya lebih banyak perbaikan redaksi dan klarifikasi teknis, bukan penambahan fitur.

C++11: Renaisans C++ Modern #

Penyusunan standar berikutnya sempat tersendat bertahun-tahun sehingga saat masih digarap ia dijuluki “C++0x”. Standar itu akhirnya selesai pada 2011 dan dinamai C++11; dampaknya begitu besar hingga komunitas menyebut era ini renaisans C++. Komite tidak hanya menambah fitur, tetapi mendesain ulang cara sehari-hari kita menulis C++ agar lebih ringkas dan lebih aman. Beberapa fitur penting C++11:

  • auto untuk membiarkan compiler menyimpulkan tipe sebuah variabel.
  • Lambda expression, yaitu fungsi kecil tanpa nama yang ditulis langsung di tempat pemakaian.
  • Range-based for untuk mengunjungi seluruh elemen container tanpa mengelola indeks manual.
  • Move semantics dan rvalue reference untuk memindahkan isi objek tanpa penyalinan mahal.
  • Smart pointer (std::unique_ptr, std::shared_ptr) yang mengelola memori heap secara otomatis.
  • Thread, mutex, dan atomics di pustaka standar, sehingga pemrograman paralel tidak lagi bergantung pustaka pihak ketiga.
  • nullptr sebagai pengganti literal NULL yang rawan salah tipe.

Sejak C++11 pula komite menetapkan ritme rilis tiga tahunan, dan ritme ini berjalan konsisten sampai sekarang.

Ritme Tiga Tahunan: C++14 sampai C++23 #

Dengan siklus tiga tahunan, tiap edisi standar berukuran lebih moderat dibanding C++11 sehingga compiler lebih cepat mengadopsinya. Garis waktu ringkasnya seperti berikut:

Diagram di atas merangkai tonggak utama dalam satu garis: era eksperimen (1979-1985), era standarisasi (1998), era modernisasi (2011), dan era ritme tiga tahunan (2023-2026). Detail tiap edisi modernnya sebagai berikut:

  • C++14 (2014): penyempurnaan C++11 — generic lambda, deduksi tipe kembalian fungsi, dan std::make_unique.
  • C++17 (2017): structured bindings, if constexpr, std::optional, std::variant, std::string_view, serta pustaka std::filesystem.
  • C++20 (2020): empat fitur pilar — concepts, ranges, coroutines, dan modules — ditambah operator perbandingan tiga arah (<=>) serta std::format.
  • C++23 (2023): std::print/std::println untuk output modern, std::expected untuk penanganan error, deducing this, dan std::generator.

C++26 dan Ke Mana Arahnya #

Sesuai ritme tiga tahunan, standar berikutnya adalah C++26. Proses penyusunannya selesai secara teknis pada Maret 2026 melalui tahap ballot DIS (Draft International Standard), dan publikasi resmi ISO menyusul setelahnya — artinya, saat kita belajar, C++23 tetap menjadi standar yang sudah terbit penuh. Fitur unggulan C++26 antara lain reflection (memeriksa struktur program pada saat kompilasi), contracts (syarat awal dan akhir pada fungsi), serta std::execution untuk model eksekusi asinkron. Daftar fitur tiap standar beserta dukungan compiler-nya selalu bisa kita cek pada halaman compiler support cppreference , sedangkan ringkasan proses standardisasi tersedia di situs resmi isocpp.org .

Mencetak Garis Waktu dengan Program #

Untuk mengukuhkan pemahaman, kita cetak garis waktu tersebut sebagai data di dalam program. Konsep std::vector (daftar bernilai dinamis) belum kita bahas tuntas — dibahas penuh pada Chapter std::vector di Section Array dan String — untuk sekarang cukup pahami ia sebagai wadah daftar teks yang bisa dijumlah isinya.

cpp
#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> tonggakSejarah = {
        "1979 | 'C with Classes' dimulai di Bell Labs",
        "1985 | C++ versi komersial pertama dirilis",
        "1998 | C++98 menjadi standar internasional ISO",
        "2003 | C++03 merapikan redaksi standar",
        "2011 | C++11 membuka era C++ modern",
        "2014 | C++14 menyempurnakan fitur C++11",
        "2017 | C++17 menambah structured bindings dan filesystem",
        "2020 | C++20 menghadirkan concepts dan ranges",
        "2023 | C++23 memperkenalkan std::print",
        "2026 | C++26 selesai disusun secara teknis"
    };

    for (const std::string& baris : tonggakSejarah) {
        std::cout << baris << "\n";
    }

    return 0;
}

Output yang Dihasilkan:

text
1979 | 'C with Classes' dimulai di Bell Labs
1985 | C++ versi komersial pertama dirilis
1998 | C++98 menjadi standar internasional ISO
2003 | C++03 merapikan redaksi standar
2011 | C++11 membuka era C++ modern
2014 | C++14 menyempurnakan fitur C++11
2017 | C++17 menambah structured bindings dan filesystem
2020 | C++20 menghadirkan concepts dan ranges
2023 | C++23 memperkenalkan std::print
2026 | C++26 selesai disusun secara teknis

Mari kita bedah program di atas baris demi baris:

  1. Baris 1-3 (#include ...): tiga header disertakan — <iostream> untuk output, <string> untuk tipe teks, dan <vector> untuk wadah daftar.
  2. Baris 5 (int main()): titik awal eksekusi program; struktur ini dijelaskan lebih dalam pada Chapter Struktur Program C++.
  3. Baris 6-17: tonggakSejarah bertipe std::vector<std::string> berisi sepuluh baris teks yang diinisialisasi lewat daftar nilai di dalam kurung kurawal.
  4. Baris 19-21 (range-based for): loop ini mengunjungi setiap elemen tonggakSejarah satu per satu; tiap nilai disimpan sementara di baris lalu dicetak dengan std::cout.
  5. Baris 23 (return 0): program melaporkan selesai tanpa masalah kepada sistem operasi.

Setelah memahami dari mana C++ berasal dan ke mana arahnya, langkah berikutnya adalah menempatkan C++ di antara bahasa-bahasa sekelasnya. Pada Chapter berikutnya kita membandingkan C++ dengan C dan Rust secara teknis, agar kita bisa menjawab pertanyaan klasik: “kenapa tidak pakai yang lain?”