C++ Benar-Benar Menyenangkan
(learncodethehardway.com)- Sejak C++11, bahasa dan ekosistem C++ berubah besar, dan lewat proses membuat serta bereksperimen sendiri, C++ menjadi bahasa yang menghidupkan kembali kesenangan dalam pemrograman
- Pada suatu masa, C++ dikenang oleh banyak developer sebagai bahasa yang melelahkan karena berlebihannya template metaprogramming serta budaya yang berpusat pada standar dan pola
- Perubahan seperti
auto,nullptr,range-for, lambda,<chrono>, smart pointer, dan<thread>mengubah besar gaya coding C++ - C++ modern punya pilihan luas, mulai dari filesystem, manajemen paket, GUI/TUI, grafis, matematika, AI, hingga akses OS API, sehingga lebih mudah membuat sendiri apa yang diinginkan
- Kekurangan seperti error compiler, build tool, kepatuhan standar, kompleksitas historis, dan RAII masih ada, tetapi kemungkinan berkreasi melampaui ketidaknyamanan itu
Mengapa C++ Kembali Menyenangkan
- Saat membuat game roguelike kecil, algoritme Dijkstra dimanfaatkan untuk pembuatan peta guna mengimplementasikan terowongan yang menghubungkan ruangan, dan dalam prosesnya C++ tidak banyak menghambat eksperimen
- Eksperimen menggambar antarmuka pengguna FTXUI langsung ke jendela render SFML juga bisa dilakukan, dan dalam proses ini penanganan Unicode di C++ dipelajari
- Pekerjaan seperti ini tidak mudah, tetapi benar-benar mungkin dilakukan, dan rasa “ide ini benar-benar berjalan” itulah yang membuat C++ menyenangkan
- Alasan mulai memprogram bukanlah untuk membuat miliarder menghasilkan lebih banyak uang, bertarung dengan rendering engine, atau memuaskan lapisan atas proyek open source, melainkan kesenangan mengimplementasikan ide
Kelelahan pada Masa Template Metaprogramming
- Dari akhir 1990-an hingga awal 2000-an, C++ sangat diwarnai suasana untuk menerapkan template metaprogramming pada segala hal, dan periode ini dibahas sebagai titik balik yang membuat C++ terasa tidak menyenangkan
- Ada diskusi bahwa menjumlahkan dua angka dengan template lebih cepat daripada menjumlahkannya secara langsung, tetapi muncul contoh bahwa output assembly yang sebenarnya sama
- Persepsi bahwa komite standar C++ kurang proaktif dalam memberi usability yang baik bagi programmer juga memperbesar pengalaman negatif
- Saat itu C++ dikenang sebagai bahasa yang penuh tanda kurung sudut
<>dan sintaks rumit, tetapi memberi sedikit hasil - Java juga awalnya terlihat menarik karena garbage collector dan sifatnya yang ramah developer, tetapi kemudian menimbulkan kelelahan serupa karena boilerplate dan berlebihannya design pattern
Rasa Bahasa yang Diubah oleh C++11
- Fitur yang ditambahkan di C++11 dinilai sebagai perubahan yang sangat mengubah kesan terhadap C++
- Fitur utamanya adalah sebagai berikut
auto: keyword inferensi tipe otomatis yang mengurangi beban menulis nama tipe yang sama berulang-ulangnullptr: representasi null pointer yang memperbaiki masalahNULLdari Crange-for: loop yang, bersamaauto, membuat iterasi container lebih sederhanalambda expressions: lambda yang dapat sangat mengubah desain API dan usability<chrono>: library waktu type-safe yang memungkinkan ekspresi seperti100ms<regex>: fitur regular expression yang masuk ke standard libraryunique_ptr,shared_ptr: smart pointer untuk menangani ownership dan reference counting<thread>: fitur yang memasukkan multithreading ke ekosistem bahasa dasar
- C++11 mengubah filosofi dan gaya bahasa tanpa membuang cara lama, dan dalam hal ini diterima mirip seperti ES6 pada JavaScript
Pilihan dalam Ekosistem C++ Modern
- C++ terbaru memiliki banyak fitur yang diharapkan dari bahasa lain
- Tool dan library yang disajikan sebagai contoh adalah sebagai berikut
- Traversal filesystem:
filesystem - Manajemen paket: Conan, Meson WrapDB, vcpkg
- Library matriks: Eigen
- AI: TensorFlow C++ API
- Grafis: SFML
- GUI: Qt, wxWidgets, ImGui
- TUI: FTXUI
- Traversal filesystem:
- Kualitas ekosistem berbeda-beda untuk tiap item, tetapi secara keseluruhan dinilai lebih tinggi daripada pengalaman dengan JavaScript dan Python
- Khususnya FTXUI dan STL disebut sebagai contoh yang menunjukkan desain dan usability yang baik
Kemungkinan Implementasi yang Luas yang Menciptakan “Kesenangan”
- Alasan C++ menyenangkan bukan hanya karena fitur modern ditambahkan, tetapi karena kemungkinan implementasi untuk membuat hampir apa saja
- Aplikasi desktop dapat dibuat dengan fenster, SFML, Qt, atau dengan menangani OS API secara langsung
- Untuk suara, pilihannya luas, dari opsi cepat seperti SFML hingga tool komersial seperti Wwise
- Grafis 3D punya beragam pilihan seperti OpenGL, Vulkan, Direct3D, dan Ogre3D
- Di bidang matematika ada library seperti BLAS, Eigen, dan GMTL
- Bahkan jika library yang dibutuhkan tidak ada, sesuatu bisa dibuat dengan mengakses C atau C++ ABI dan API sistem operasi secara langsung, dan proses membuat langsung itu sendiri menjadi bagian dari kesenangan
Kebebasan Berkreasi dari Bahasa yang Menepi dari Tren
- C++ dinilai memiliki kualitas bahasa dan ekosistem yang tinggi, tetapi karena saat ini bukan bahasa yang sedang tren, ia lebih sedikit menarik perhatian jenis pihak yang merusak bahasa
- Komunitas C++ digambarkan sebagai suasana yang tidak terlalu ikut campur, apa pun yang dibuat
- Proyek seperti library matriks, library GUI, game engine, atau game aneh bisa dicoba dengan bebas
- Pekerjaan kreatif membutuhkan baik tahap mengeluarkan ide terlebih dahulu, maupun tahap setelahnya untuk mengkritik dengan dingin dan meningkatkan kualitas
- Pada bahasa lain, organisasi, kepemimpinan, dan tekanan komunitas dinilai menghambat eksperimen di tahap tengah proses kreatif
- Kemungkinan luas C++ dan budaya yang relatif rendah dalam memberi rasa malu dapat menciptakan pengalaman kreatif
Kekuatan cppreference.com
- cppreference.com dinilai sebagai dokumentasi bahasa pemrograman terbaik di antara yang pernah digunakan
- Kelebihannya adalah sebagai berikut
- Semua keyword dan library disusun sebagai dokumentasi referensi
- Sebagian besar entri memiliki contoh yang benar-benar berjalan
- Menampilkan versi standar C++ tempat tiap fitur diperkenalkan
- Terhubung ke dokumen standar dan referensi terkait
- Memiliki kotak pencarian berbasis DuckDuckGo sehingga mudah menemukan sesuatu meski ejaan salah atau tidak tahu istilah persisnya
- Konsep penting seperti Copy elision juga dijelaskan bersama contoh
- Kekurangannya adalah tidak ada cara memasang compiler di berbagai platform
- Karena jumlah compiler dan platform C++ tidak terlalu banyak, masih ada ruang untuk menambahkan panduan memulai
Masalah C++ yang Masih Tersisa
- Ini bukan berarti C++ adalah bahasa yang sempurna; seperti bahasa lain, ada banyak hal yang tidak nyaman
- Di Windows, mengonfigurasi compiler dan development tool melalui jalur instalasi non-Microsoft sulit, sehingga skrip instalasi PowerShell dibuat sendiri untuk itu
- Ketidaknyamanan utama yang saat ini dirasakan adalah sebagai berikut
- Lebih dari 95% pesan error compiler dinilai berada di level terburuk di industri
- Build tool sulit digunakan, dan Meson juga mengalami masalah mengabaikan instruksi paket yang terpasang lalu memakai library sistem yang rusak
- Kurang ada insentif untuk membuat produsen compiler mengikuti standar
- C++ sangat kompleks karena sejarahnya, dengan gaya lama heap allocation dan raw pointer, gaya template metaprogramming, gaya berbasis stack setelah C++11, serta gaya yang lebih baru yang berpusat pada
structhidup berdampingan - RAII sering mengganggu dalam situasi konfigurasi yang realistis, dan dianggap perlu ada titik tengah antara constructor inisialisasi ala bahasa lain dan RAII saat ini
- Meski ada kekurangan ini, ketidaknyamanan C++ tidak sampai merusak kesenangan, dan C++ sudah berbeda dari kesan masa lalu sebagai bahasa yang berpusat pada tanda kurung sudut dan pointer
- Kode layout GUI FTXUI adalah contoh sintaks modern yang, jika tidak tahu bahwa itu C++, tampak seperti bahasa lain
1 komentar
Opini Hacker News
Aku hampir bisa disebut sebagai pembenci C++, tapi itu karena aku benci harus menangani C++ untuk kode kerja yang butuh keandalan bersama rekan kerja yang tidak sepenuhnya bisa dipercaya
Untuk proyek pribadi, sejauh ini itu termasuk salah satu pengalaman ngoding yang paling memuaskan, dan kemampuan untuk mengendalikan eksekusi dengan sangat rinci benar-benar terasa seru
Aku meninggalkan C++ sekitar 10 tahun lalu dan tidak berniat kembali, tetapi akhir-akhir ini yang paling penting untuk proyekku adalah keandalan jangka panjang, jadi Rust + CI/CD sangat cocok
Meski begitu, aku rindu sensasi merancang dan mengimplementasikan program agar berjalan persis seperti yang kuinginkan, dan mengetahui itu terjadi berkat keahlian serta wawasanku
Apakah aku ingin orang yang bekerja bersamaku digerakkan oleh motivasi seperti itu? Tentu tidak, tetapi secara pribadi itu adalah kesenangan yang sulit dilupakan
Sistem build dan manajemen paket adalah mimpi buruk, preprocessor terasa seperti lelucon sadis, sintaksnya mengerikan, dan di runtime ada terlalu banyak ranjau yang butuh pengalaman bertahun-tahun agar tidak menembak kaki sendiri dengan senapan mesin
Tapi dalam arti tertentu, rasa sakit seperti ini justru memperbesar kegembiraan saat akhirnya berhasil mengeluarkan executable yang dibungkus kecerdasan dan air mata darah
Aku memakai C/C++ untuk kerja selama beberapa tahun dan tidak ingin kembali lagi
Terlalu banyak waktu habis untuk men-debug kode orang lain, menghadapi masalah integrasi yang samar, dan memutar spaghetti build system
Rasanya selama 10 tahun terakhir industri teknologi kehilangan gagasan ini, dan menurutku salah satunya karena perusahaan teknologi besar yang menaruh orang-orang terbaik di penjara dewasa dengan makanan enak dan kursi empuk
Startup juga jadi kurang menyenangkan, dan industri VC mendorong pola pikir yang sempit sehingga terlalu banyak startup kloning dan tren membuat hal yang sama
Alasan aku memakai C++ untuk tiap proyek baru adalah karena aku yakin kalau perlu membuatnya sendiri, aku bisa
Framework sering kali tidak bekerja sesuai keinginanku, terutama saat menyentuh inti proyek, jadi aku tidak suka terus bergantung padanya
Kalau bisa bikin sendiri, bikin sendiri; kalau tidak, baru pakai framework
Kalau bisa bikin sendiri, C++ adalah alat hebat yang bisa melakukan apa saja dan tidak menghalangi dalam hal-hal yang penting
Bahasa seperti Rust mungkin akan mengeluh bahwa aku melakukan hal berbahaya, tetapi di C++ aku bisa mengekspresikan model yang ada di kepalaku secara langsung
Kadang aku berpikir dengan pointer, dan pointer itu alat yang sangat bagus
Mari ambil kembali kesenangan itu, bukan hanya dalam kehidupan pribadi, tetapi juga dalam pekerjaan
Tulisan ini terlihat agak membingungkan
Ia menyampaikan banyak poin, tetapi sulit menarik kesimpulan mengapa itu berarti C++ lebih menyenangkan atau kurang menyenangkan
Membingungkan juga ketika C++ modern disebut berkualitas sangat tinggi sambil pada saat yang sama membahas masalah legacy yang luas dan tool yang mengerikan
Ia bilang
unique_ptrhebat tetapi sangat membenci RAII, dan klaim bahwa metaprogramming dulu ada di mana-mana tetapi sekarang tidak lagi juga terasa anehKalau melihat
concepts, rasanya tidak begitu, dan pernyataan bahwa C++ punya library grafis terbaik atau bahwa memasang Python lebih sulit daripada C++ juga terlihat seperti obsesi penulis yang tidak terlalu relevan dengan argumennyaPada akhirnya penulis tampaknya menikmati C++ karena kombinasi kompleks faktor-faktor pribadi, dan itu sendiri tidak masalah
Aku juga pernah paling bersenang-senang saat memprogram dengan C++ karena performa dan sifat teknisnya, tetapi dalam pengembangan perangkat lunak dunia nyata, C++ buruk karena banyak alasan yang sudah kita tahu
C++ adalah bahasa yang sangat kontradiktif, terluka oleh puluhan tahun legacy dan politik, dan mengabaikan kenyataan C++ adalah kesalahan terbesar dalam diskusi tentang C++
Sikapku terhadap C++ belakangan ini lebih dekat ke rasa lelah, dan aku tidak ingin terus melompati rintangan yang dilemparkan C++ selama bertahun-tahun terakhir
Tidak perlu terus memukul kuda mati terlalu lama; biarkan saja C++ tetap menjadi C++
Menurutku tulisan ini bukan membingungkan, melainkan lebih seperti penulis sedang bersenang-senang dan ingin membagikan kegembiraan itu sebanyak mungkin
Ini bukan esai argumentatif yang rapi, melainkan lebih dekat ke “kalau kamu merasa relate tanpa perlu diyakinkan, mungkin kamu juga akan menikmatinya”
Kalau kamu lelah karena dihajar realitas pekerjaan komersial, sangat masuk akal kalau ini terasa tidak nyambung
Aku sendiri akhir-akhir ini justru sangat menikmati JavaScript, dan kalau aku menulis artikel serupa, mungkin akan terasa sama buruknya bagi orang yang lelah dengan JavaScript komersial selama 10 tahun terakhir
Tetap saja, senang melihat penulis menikmati sesuatu dan memutuskan untuk membagikan kesenangan itu
Aku menghabiskan 3 hari untuk membuat dependensi pihak ketiga di proyek C++ tertaut statis dan berjalan di Linux/Windows/macOS
Paket itu tidak ada di conan/vcpkg, hanya ada sebagai repositori GitHub dengan kombinasi Makefile/cmake yang aneh
Aku jelas bukan ahli cmake/cpp, tetapi di sebagian besar bahasa modern ini biasanya bukan masalah dengan cara seperti
pip install,cargo add,npm install,go getWalaupun membaca detail semantik C++ dari awal sampai akhir lewat buku, bekerja pada proyek nyata tetap terasa menyakitkan
Menakjubkan bahwa akhirnya kita sampai pada sesuatu yang seperti autotools versi JavaScript
Men-static-build kode orang lain atau mengubahnya agar bisa di-build di platform lain memang kadang rumit, tetapi linking sendiri biasanya hanya soal direktori include, path library, dan penentuan library
Kalau belum ada yang membuat paket vcpkg/conan, kemungkinan besar juga tidak ada di pip/cargo/npm
Kalau di C++ saja sulit, di bahasa lain bisa jadi malah jauh lebih sulit
Meski begitu, ini juga menunjukkan bahwa sebagian sejarah C++, terutama urusan build, memang berada dalam kondisi yang sangat buruk
Kalau sudah ada di vcpkg saja, tingkat kesulitan instalasinya jadi persis sama seperti ekosistem lain
Saya sesekali mengerjakan sesuatu dengan C++ alih-alih C, dan polanya selalu mirip
Saya belajar teknik C++ baru, lalu menulis kode karena merasa semuanya akan jadi lebih baik, kemudian dihantam error compiler, lalu menghabiskan sisa hari untuk mempelajari kenapa saya tidak bisa melakukan hal yang saya inginkan
Biasanya saya terikat di C++14 dan beberapa masalah memang sudah diperbaiki di versi-versi setelahnya, tapi tetap saja
Saya benar-benar ingin menyukai C++, karena secara teori ia memberi C yang lebih kuat dan bisa meningkatkan produktivitas, tetapi pada akhirnya beban kognitifnya terlalu besar sehingga saya biasanya berakhir memakai “C dengan class” lalu lanjut saja
Saya banyak memakai C++ real-time pada 2003 dan membencinya, tetapi tahun lalu saya akhirnya mulai menyukainya setelah menulis sebagian besar kode saya dengan C++
Lambda dan
autoadalah titik balik yang membuat saya tidak lagi membenci C++Saya juga sedikit memakai template, tetapi terutama agar tidak perlu menulis banyak percabangan untuk tiap variasi dari fungsi yang sama
Berkat lambda, saya bisa menulis kode seperti cara yang pertama kali diajarkan kepada saya oleh para guru keluarga Lisp bernuansa SICP
Dengan
unique_ptr, alokasi pun tidak lagi terasa menjengkelkanJangan begitu; pikirkan dulu bagaimana kode itu seharusnya ditulis, lalu gunakan fitur yang memang menyelesaikan masalahnya
Masalah → solusi, bukan sebaliknya
Misalnya, template C++ pada umumnya mengerikan, tetapi duck typing saat compile time atau penambahan padding otomatis berbasis
sizeof()kadang sangat bergunaAwalnya saya programmer C# yang sedang belajar C karena proyek embedded, dan alurnya benar-benar sama
C++ punya banyak fitur keren yang tampak sangat kuat kalau pas sekali dengan aplikasi yang dikerjakan
Tetapi setiap kali saya mencoba fitur baru, hal yang ingin saya lakukan selalu menjadi kasus tepi yang tidak bekerja dalam situasi itu, dan setelah mencoba berjam-jam atau berhari-hari saya menyerah lalu menulisnya begitu saja dalam C
Tentu saja ada bahasa seperti Python atau Ruby yang agak menyimpang dari kecenderungan ini
Biasanya saya menyalin teks error lalu meminta mereka menguraikannya
C++ memang sangat menyenangkan, dan menurut saya keluhan orang sangat dipengaruhi oleh konteks
Banyak pengembang C++ membenci bahasanya, tetapi sering kali arah kebencian itu salah
Yang sebenarnya mereka hadapi sering kali adalah produk legacy yang dibuat oleh orang-orang yang tidak terlalu pandai menulis software
Saya mengalami hal serupa di Rust: saya dimasukkan ke proyek Rust lama milik perusahaan, dan di dalam codebase lama itu ada banyak konvensi yang saling bertabrakan
Ada tipe penanganan error yang tidak tersusun baik, abstraksi class yang buruk, dan blok
unsafeyang tidak perlu; itu menjadi salah satu proyek paling menyiksa yang pernah saya kerjakanMudah untuk menyalahkan Rust, padahal sebenarnya itu cuma software development yang buruk
C++ memang punya cacat, tetapi sebagian besar rasa sakit yang dialami orang berasal dari harus menangani kode buruk yang akan tetap berantakan dalam bahasa apa pun
v[x]=ymenjadi undangan bagi korupsi memori acakstd::optionaldi C++ akan menjadi undefined behavior jika*vdipanggil saatvkosongInti dari optional adalah menampung nilai yang bisa saja kosong, jadi sulit dipahami kenapa operasi yang paling umum justru dibuat menjadi undefined behavior saat optional kosong
Dari pengalaman saya banyak memakai C++, masalahnya adalah setiap programmer dalam proyek harus sempurna 100% sepanjang 100% waktu
Anda memang bisa menjalankan memory checker dan mode debug STL, tetapi jika itu tidak dijalankan juga di rilis, maka Anda harus berharap test suite Anda menyentuh semua hal aneh yang bisa dilakukan pengguna yang bodoh atau berniat jahat
Di zaman ketika software sudah menjadi sepenting ini, dan Rust tampak mendekati performa C++, saya ragu masih layak memakai bahasa yang banyak fitur dasarnya sangat sulit digunakan dengan aman
Bahkan keadaannya terus memburuk: memanggil
std::functionyang kosong dulu melempar assert, tetapistd::copyable_functionyang baru justru menjadikannya undefined behaviorSistem tipenya menjengkelkan, dan sebagai imbalannya Anda juga tidak benar-benar mendapat keamanan memori yang layak
Most vexing parse memang benar-benar menjengkelkan, dan hal-hal aneh warisan C seperti pointer decay juga tetap ada
Di atas itu semua, solusi baru seperti
std::arrayterus ditambahkan tanpa pernah bisa menyingkirkan cara lamaKetergantungan terus-menerus pada preprocessor demi meniru sistem import modul yang sebenarnya juga bermasalah, dan dari situ lahir akal-akalan seperti pengaturan kode class atau idiom pimpl
Secara mendasar, cacatnya terlalu besar dan terlalu banyak sehingga saya sudah sulit melihat keindahan di dalamnya lagi
Sebaliknya, proyek dalam bahasa blub yang sederhana biasanya cukup mudah diuraikan, tak peduli bagaimana keadaan codebase-nya
Senang rasanya ada orang yang menikmati C++, tetapi secara pribadi, setelah mengalaminya selama lebih dari 20 tahun, saya rasa sudah saatnya mengakhiri C++
Pokoknya berantakan
Kalau benar-benar butuh kontrol tingkat rendah, meski ada kekurangannya saya lebih pilih menangani C, dan kalau tidak, Rust, Python, dan lainnya jauh lebih membuat saya bahagia
Meski begitu, C++ akan tetap bertahan
Kode yang ditulis dengan bahasa itu terlalu banyak, dan kalau benar-benar menguasainya itu keterampilan yang bagus serta ada pekerjaan dengan bayaran sangat tinggi
Bagi saya bahasanya terlalu menghalangi dan terasa terlalu kompleks
Saya tahu narasi bahwa “C++ modern” itu hebat, versi lama tidak perlu dipelajari, dan setiap versi baru membuatnya lebih sederhana
Masalahnya, codebase yang benar-benar kita pegang bukanlah C++ modern
Ia memakai semua fitur yang pernah muncul sampai sekarang, sulit, dan penuh jebakan
Orang yang selama bertahun-tahun hanya mengerjakan C++ di proyeknya sendiri mungkin bisa membangun keahlian tertentu dan menjadi kebal terhadap kompleksitasnya, tetapi ini tetap bukan bahasa yang benar-benar bagus
Misalnya mengganti tipe data inti, pustaka standar, dan sebagainya
Terutama setelah C++20, basis pengganti itu terasa cukup native dan ekspresif
Banyak proyek C++ baru yang saya lihat sangat kuat mengambil arah ini
Kemampuan untuk dengan mudah membuat bahasa spesifik domain tingkat sistem untuk aplikasi adalah salah satu kekuatan C++
Sayangnya tidak sempat saya selesaikan, tetapi yang saya ingat antara lain kelas,
std::function,std::unordered_map,std::string, danstd::unique_ptrKalau tidak bergaya mirip, rasanya sulit membayangkan membaca kode orang lain
Karena saya tidak menulis program besar secara profesional, hal tersulit adalah melampaui pola pemrograman seperti pola Visitor
Saya berharap C++ berhenti di C++11
Komitenya sekarang tampak ingin memasukkan semuanya ke dalam bahasa, dan C++ terlihat seperti bahasa raksasa yang mendukung setiap gaya pemrograman yang serba niche
Tapi ini kekacauan yang menyenangkan, dan saya suka menulis dengan C++
Kadang itu yang penting
Hubungan saya dengan Rust jauh lebih dingin
Saya menghormati Rust, dan terutama dalam konteks seperti pekerjaan, ketika sulit membela penggunaan C++, saya memakainya jika saya merasa Rust adalah pilihan yang tepat, dan saya melihat apa yang dilakukan Rust itu penting
Tetapi meski sejauh ini saya sudah mengerjakan cukup banyak proyek Rust, memakainya tetap terasa membosankan
Dalam hal-hal yang mendasar ia memang lebih baik, tetapi setidaknya bagi saya, ia kurang menyenangkan
Kalau segel
unsafedibuka, bukankah kita bisa secara eksplisit me-cast integer menjadi pointer, dan misalnya mengendalikan perangkat keras lewat memory-mapped I/O?Tulisan ini adalah ceramah panjang dengan cakupan luas, dan hanya dengan huruf “C++” saja orang bisa terpancing sehingga banyak bagiannya diabaikan
Saya juga kadang begitu
Kalau mau melihat keluhannya, langsung lompat ke bagian “It's Not All Puppies and Butterflies”
Penulis sangat terkesan dengan C++11, dan setelah sengaja mengabaikan C++ selama hampir 20 tahun, saya pun merasakan hal yang mirip
Saya senang ia memperkenalkan paket dan pustaka yang tampak asyik untuk dimainkan, tetapi tetap saja memasukkan pustaka lain ke proyek saya sering terasa menyakitkan
Saya langsung teringat header satu berkas
FTXUI menarik
Dan memang cppreference.com luar biasa
Dokumentasi Python juga cukup bagus, tetapi saya belum pernah melihat dokumentasi yang sebagus cppreference.com
Dokumentasi Python tersebar ke sana-sini, tidak lengkap di banyak tempat, dan juga kurang memiliki gaya penyuntingan yang konsisten
Namun menurut kerangka Diataxis, ia mencakup bukan hanya dokumentasi referensi, tetapi juga beberapa jenis dokumentasi lain dengan cukup baik
Orang-orang yang menulis dokumentasi itu secara eksplisit mempertimbangkan kerangka ini saat mencari arah perbaikan
Namun tetap saja, ini adalah pekerjaan open source berbasis sukarelawan yang bergerak hampir seperti pengembangan kode
Sudah lama saya ingin bergerak “lebih dekat ke sistem”, dan belajar Rust di samping itu juga tidak mudah
Melihat tulisan ini membuat saya punya harapan bahwa mungkin saya bisa jika kembali mempelajari C++
Halo CMake… atau mungkin seharusnya Meson
Saya setuju bahwa C++ itu hebat jika tim yang berbakat tahu cara memakai C++ modern dengan baik dan memulai proyek baru
Ini bahasa yang menyenangkan dan kuat, performanya bagus, dan walau kompleks, debugging serta optimasinya relatif intuitif
Saya pernah mendapat kesempatan bekerja pada codebase berusia sekitar 5 tahun yang ditulis berdasarkan standar pasca-C++11, dan itu sangat menyenangkan karena berbagai alasan yang disebut di tulisan
Sebaliknya, codebase lama yang berevolusi selama 20~30 tahun, atau codebase yang tidak dipelihara oleh orang-orang yang kompeten, akan memberi pengalaman yang sama sekali berbeda
Pada usia 21 tahun perusahaan menawarkan untuk membiayai kuliah saya, jadi saya kembali mengambil gelar teknik komputer, lalu belakangan pindah ke ilmu komputer
Di hari pertama kelas “pengantar pemrograman”, saya langsung jatuh cinta saat menyentuh C++
Dibandingkan PHP 7 yang saya pakai saat itu, sistem tipe, debugging, dan ekosistemnya luar biasa
Dengan izin manajer, saya membuat API berbasis C++ untuk sebagian aplikasi intranet lama agar PHP bisa memanggilnya lewat websocket, dan saya bisa memanfaatkan sistem tipe serta performanya
Sistem-sistem itu masih dipakai setiap hari di seluruh perusahaan sampai sekarang, dan pemeliharaannya juga tidak menjadi masalah
Bahkan meski berjalan di lingkungan yang cukup aneh bernama IBM Pase for i
Sekarang, setelah mencoba Rust dan Axum, kalau membuat API seperti itu saya akan jauh lebih memilih ekosistem Rust, tetapi C++ juga layak mendapat pengakuan
Terutama jika datang dari bahasa web seperti JavaScript atau PHP, bukan TypeScript, ini benar-benar bahasa yang hebat
Malah, dari beberapa kemungkinan yang bisa saya bayangkan, misalnya C, Java, atau Fortran, saya rasa saya akan lebih memilih C++
Pengecualiannya mungkin C#, tetapi saya tidak tahu apakah ia sudah cukup tua untuk masuk kondisi itu
Berlawanan dengan anggapan bahwa regex bawaan C++ cukup bagus,
std::regexsulit disebut bagus.Performanya buruk dan dukungan Unicode-nya juga kurang, jadi umumnya lebih baik dihindari.
std::regexSaya pernah belajar C++ dan juga menikmatinya, tetapi tidak mendalaminya.
Saya selalu merasa C lebih baik, dan memang ada banyak codebase kelas atas yang bisa dibaca untuk mempelajari C dengan lebih baik, seperti game engine Dune atau utilitas Unix.
Setelah belakangan sedikit mencoba Rust, saya jadi sulit melihat alasan kuat untuk memakai C++.
Kombinasi sistem tipe yang kuat yang terinspirasi dari functional programming dan performa tampak sulit ditandingi, dan rasanya hampir seperti bahasa yang nyaris sempurna.
Meski begitu, jelas tetap ada alasan warisan yang membuat orang harus memakai C++.
Mungkin seperti game engine, pemrograman embedded, atau integrasi dengan warisan lain.
Kalau codebase C++ baru, sebenarnya bisa dibuat cukup rapi.
Tapi pada titik ini saya masih sulit memahami kenapa software baru harus dibuat dengan C++.
Ada banyak hal menyebalkan di C++.
Manajemen library/paket tidak distandardisasi, header adalah duplikasi kode, standard library berbeda-beda tergantung implementasi dan hampir sulit dibaca.
Ada perilaku aneh di standar, orang bergantung pada undefined behavior tanpa sadar, ada masalah use-before-allocation, dan kebocoran memori muncul secara halus karena masalah ownership serta reference count yang salah.
Segalanya harus dibuat
constalih-alih default, dan untuk menjaminnoexceptkita harus memeriksa exception dari semua yang dipanggil, sementara error saat bekerja dengan standard library juga sulit dibaca.Kode yang sangat berorientasi objek pada dasarnya adalah utang teknis.
LSP untuk C++ tidak bersifat struktural seperti Rust yang memeriksa abstract syntax tree untuk menemukan definisi, jadi navigasi dan pemahaman codebase lebih lambat.
Rust mendukung
nostdsecara eksplisit sebagai fitur kelas satu, tetapi di C++ untuk mematikan standard library perlu flag khusus per compiler dan sulit memastikan apakah itu sudah benar.Karena itu, alasan memakai C++ demi embedded menurut saya kurang meyakinkan.
Rust juga punya game engine seperti bevy, meski masih baru, dan kalau mau Rust juga bisa dipasang ke scripting Godot.
Audio level rendah juga sama mudahnya di Rust, dan penanganan lintas platform bisa dilakukan dengan satu crate saja.
Secara umum, menurut saya inti persoalannya adalah kode warisan dan keengganan untuk berubah.
Ini mencakup jumlah pengguna, pengetahuan dan materi yang telah diterbitkan dan tersedia, buku, kuliah, blog, tulisan, video, library software, hingga kompatibilitas tinggi dengan C, bahasa besar lainnya.
Bagi orang yang sudah beberapa tahun berada di bidang ini, hal itu nyaris seperti pengetahuan umum di industri software.
Saya sendiri tidak terlalu banyak memakai C++, jadi sulit dibilang sebagai pemula yang benar-benar layak, tetapi dulu saya pernah membeli dan membaca buku-buku klasik C++ dari pencipta bahasanya, Bjarne Stroustrup, Scott Meyers, dan lainnya, lalu memahami sebagian isinya.
Namun C sendiri sudah saya pakai cukup banyak di produksi selama bertahun-tahun, termasuk untuk produk komersial yang sukses.
https://www.stroustrup.com/applications.html
https://www.stroustrup.com
https://en.m.wikipedia.org/wiki/Bjarne_Stroustrup
https://en.m.wikipedia.org/wiki/Scott_Meyers
Karena itu saya melihat pengembangan game akan menjadi bidang yang paling lama bertahan di C++.
Kalau game crash karena segmentation fault pada 0,001% pengguna, ya seolah tidak terlalu masalah.