C++ adalah bahasa pemrograman yang paling aktif digunakan hingga hari ini. Lahir sebagai pengembangan dari bahasa C, C++ dirancang untuk memberi programmer kendali penuh atas perangkat keras komputer sekaligus mendukung pemrograman yang terstruktur. C++ menjadi tulang punggung sistem operasi, game engine, browser web, hingga kecerdasan buatan. Namun justru karena usianya yang panjang, C++ mengumpulkan banyak cara lama yang membuat belajar dan menggunakannya terasa berat. Kabar baiknya, C++ tidak berhenti berkembang. Setiap beberapa tahun, standar baru dirilis untuk membuat bahasa ini lebih aman, lebih ringkas, dan lebih mudah ditulis. C++23, versi terbaru yang resmi diadopsi pada tahun 2024, adalah lompatan besar yang membuat C++ terasa jauh lebih ramah, bahkan bagi pemula yang baru saja belajar Python.
C++ Klasik
Sebelum tahun 2011, C++ yang sering disebut “C++ klasik” menuntut programmer untuk mengurus hampir segalanya secara manual. Ingin mencetak teks ke layar? Kita harus menyertakan pustaka <iostream>, lalu menggunakan sintaks std::cout yang terasa asing. Ingin mengelola memori? Kita harus memanggil new dan delete secara eksplisit, dan jika lupa memanggil delete, program akan “bocor” memori secara perlahan. Tidak ada cara singkat untuk menulis fungsi kecil di dalam kode, tidak ada penyimpulan tipe otomatis, dan pesan error dari kompiler sering kali lebih membingungkan daripada membantu. C++ klasik sangat kuat, tetapi kekuatannya datang dengan harga yang mahal berupa kompleksitas yang tinggi.
C++11 dan C++14
Tahun 2011 menjadi titik balik. Standar C++11 memperkenalkan sejumlah fitur yang mengubah cara programmer menulis C++. Kata kunci auto memungkinkan kompiler menebak sendiri tipe data sebuah variabel, sehingga programmer tidak perlu menuliskannya secara eksplisit. Smart pointer seperti std::unique_ptr membuat manajemen memori jauh lebih aman karena memori dibebaskan secara otomatis. C++14 kemudian menghaluskan fitur-fitur ini lebih lanjut. Sebagian besar framework kecerdasan buatan besar yang ada sekarang, termasuk backend PyTorch dan TensorFlow, ditulis pada era C++11 dan C++14 ini.
C++23
C++23 membawa perubahan yang terasa lebih dekat ke cara berpikir programmer Python. Perubahan paling terlihat bagi pemula adalah std::print, sebuah fungsi baru yang bekerja sangat mirip dengan print() di Python.
Perhatikan perbandingan berikut untuk mencetak teks sederhana ke layar:
Python:
name = "Andi"
score = 95.5
print(f"Nama: {name}, Nilai: {score:.1f}")
C++ klasik / C++11:
#include <iostream>
#include <string>
int main() {
std::string name = "Andi";
double score = 95.5;
std::cout << "Nama: " << name << ", Nilai: " << score << std::endl;
return 0;
}
C++23:
import std;
int main() {
std::string name = "Andi";
double score = 95.5;
std::print("Nama: {}, Nilai: {:.1f}\n", name, score);
}
Fungsi std::print menggunakan format kurung kurawal {} yang identik dengan f-string Python. Tidak ada lagi << yang berjejer panjang, tidak ada std::endl yang membingungkan, dan dengan import std kita tidak perlu lagi menghafal daftar #include yang berbeda untuk setiap fitur. Programmer Python yang melihat kode C++23 untuk pertama kali akan merasa jauh lebih familiar dibandingkan melihat kode C++ klasik.
C++23 Lebih Mudah Daripada C++ Klasik
Dibandingkan C++ klasik, sintaks C++23 jauh lebih ringkas. Banyak hal yang dulu membutuhkan 5 hingga 10 baris kode kini dapat ditulis dalam 1 atau 2 baris. Fitur seperti auto, range-based for loop, dan structured bindings membuat kode C++23 terasa lebih “to the point”, mirip dengan gaya penulisan Python.
C++23 juga memperkenalkan std::expected sebagai cara baru menangani error. Di C++ lama, error biasanya ditangani dengan exception yang melempar pesan ke tempat lain dalam kode, sesuatu yang sulit dilacak untuk pemula. std::expected bekerja seperti fungsi yang bisa mengembalikan “hasil yang berhasil” atau “keterangan error” secara langsung, sehingga alur program lebih mudah dibaca dari atas ke bawah.
Selain itu, tedapat std::mdspan di C++23 yang membuat pengelolaan data dalam bentuk matriks atau array multidimensi jauh lebih alami. Ini sangat relevan bagi siapa saja yang belajar pemrosesan data atau kecerdasan buatan, karena konsepnya mirip dengan cara NumPy bekerja di Python.
Tentu saja C++ tetaplah C++. Beberapa konsep seperti pointer, tipe data statis, dan manajemen memori tetap harus dipahami, dan ini membutuhkan waktu. Tetapi dengan C++23, hambatan awal itu jauh lebih rendah dibanding belajar dari C++ klasik. Daripada langsung terjebak mengurus #include, namespace, dan operator << yang membingungkan, kamu bisa fokus dulu pada logika program, dan membiarkan fitur-fitur modern C++23 menangani kerumitan di balik layar.
C++23 untuk ML dan AI
Salah satu alasan C++23 makin relevan di dunia kecerdasan buatan adalah std::mdspan. Fitur ini memungkinkan program untuk melihat dan memanipulasi data multidimensi seperti matriks atau tensor tanpa perlu menyalin data ke tempat baru. Bayangkan kita punya array angka panjang di memori; mdspan dapat “memandang” data itu seolah-olah berbentuk grid 2D atau kubus 3D, persis seperti cara NumPy memandang array di Python. Ini sangat efisien karena tidak ada pemborosan memori.
Untuk memproses data dalam jumlah besar, C++23 memiliki ranges dan views yang bekerja secara lazy. Artinya, filter dan transformasi data tidak langsung dieksekusi saat ditulis, melainkan baru dijalankan saat hasilnya benar-benar dibutuhkan. Ini serupa dengan generator di Python dan sangat menghemat memori ketika bekerja dengan dataset besar.
// C++23: filter data positif lalu kuadratkan, tanpa alokasi memori baru
import std;
int main() {
std::vector<float> data = {-1.5f, 2.0f, -0.3f, 4.1f, -2.0f, 3.5f};
auto pipeline = data
| std::views::filter([](float x) { return x > 0; })
| std::views::transform([](float x) { return x * x; });
for (float val : pipeline)
std::print("{:.2f} ", val);
// Output: 4.00 16.81 12.25
}
Bandingkan dengan Python:
data = [-1.5, 2.0, -0.3, 4.1, -2.0, 3.5]
pipeline = (x**2 for x in data if x > 0)
for val in pipeline:
print(f"{val:.2f}", end=" ")
Strukturnya hampir identik. Di C++23, kita menggunakan | untuk menghubungkan operasi, sementara Python menggunakan ekspresi generator. Hasilnya sama, tetapi versi C++ akan berjalan jauh lebih cepat dan bisa dipakai untuk memproses jutaan data tanpa masalah performa.
Kolaborasi C++23 dan Python
C++ dan Python bukan pesaing, melainkan pasangan yang saling melengkapi. Python unggul dalam kemudahan penulisan kode, ekosistem library yang luas, dan kecepatan pengembangan. C++ unggul dalam kecepatan eksekusi dan kendali langsung atas perangkat keras. Dalam dunia nyata, banyak library Python yang paling populer, seperti NumPy, Pandas, dan PyTorch, sebenarnya ditulis dalam C++ di balik layar, dan Python hanya menjadi “antarmuka” yang nyaman untuk mengaksesnya.
C++23 membuat jembatan antara dua bahasa ini lebih mudah dibangun. std::span dan std::mdspan menggunakan format memori yang sama dengan NumPy, sehingga data bisa berpindah antara Python dan C++ tanpa perlu disalin. Dengan library seperti pybind11 atau nanobind, fungsi C++23 bisa “dibungkus” menjadi modul Python dan dipanggil seolah-olah fungsi Python biasa.
// Fungsi C++23 yang bisa dipanggil dari Python
#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
import std;
namespace py = pybind11;
py::array_t<float> relu(py::array_t<float> input) {
auto buf = input.request();
std::span<float> data(static_cast<float*>(buf.ptr), buf.size);
py::array_t<float> output(buf.size);
auto out_buf = output.request();
std::span<float> out(static_cast<float*>(out_buf.ptr), buf.size);
std::transform(data.begin(), data.end(), out.begin(),
[](float x) { return std::max(0.f, x); });
return output;
}
PYBIND11_MODULE(fast_ops, m) {
m.def("relu", &relu, "ReLU activation function");
}
Setelah dikompilasi, fungsi di atas dapat langsung dipakai dari Python:
import numpy as np
import fast_ops
x = np.array([-1.0, 0.5, 2.0, -0.3], dtype=np.float32)
print(fast_ops.relu(x)) # [0. 0.5 2. 0. ]
Kesimpulan
C++23 bukan bahasa yang sepenuhnya baru. Ia tetap C++, dengan semua kekuatan dan konsep fundamentalnya. Tetapi C++23 adalah versi C++ yang paling ramah yang pernah ada, terutama bagi kita yang sudah terbiasa dengan Python. Sintaksnya lebih ringkas, error handling lebih jelas, dan tools untuk pemrosesan data sudah tersedia di dalam standar tanpa perlu library tambahan. Jika kita ingin memahami bagaimana software berkecepatan tinggi dan sistem AI sesungguhnya bekerja di balik antarmuka Python yang nyaman, mempelajari C++23 adalah langkah berikutnya yang paling masuk akal.
Leave a Reply