1 poin oleh GN⁺ 2024-12-25 | 1 komentar | Bagikan ke WhatsApp
  • 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-ulang
    • nullptr: representasi null pointer yang memperbaiki masalah NULL dari C
    • range-for: loop yang, bersama auto, membuat iterasi container lebih sederhana
    • lambda expressions: lambda yang dapat sangat mengubah desain API dan usability
    • <chrono>: library waktu type-safe yang memungkinkan ekspresi seperti 100ms
    • <regex>: fitur regular expression yang masuk ke standard library
    • unique_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
  • 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 struct hidup 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

 
GN⁺ 2024-12-25
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

    • Ini salah satu deskripsi tentang C++ yang paling terasa relate bagiku
      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
    • Pekerjaan juga harus menyenangkan, sama seperti proyek pribadi
      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_ptr hebat tetapi sangat membenci RAII, dan klaim bahwa metaprogramming dulu ada di mana-mana tetapi sekarang tidak lagi juga terasa aneh
    Kalau 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 argumennya
    Pada 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 kalimat itu merangkum inti tulisannya dengan baik
      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 get
    Walaupun membaca detail semantik C++ dari awal sampai akhir lewat buku, bekerja pada proyek nyata tetap terasa menyakitkan

    • Dependensi dan rantai tool build JavaScript juga sama sulit dipahaminya dengan Makefile yang paling berantakan
      Menakjubkan bahwa akhirnya kita sampai pada sesuatu yang seperti autotools versi JavaScript
    • Penasaran bagian mana yang secara khusus sulit
      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 dibalik, aku jadi bertanya apa yang akan jadi lebih baik jika pihak ketiga ini ingin dipakai dari bahasa “modern” lain
      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

    • Ada masa ketika proses belajar itu menyenangkan, dan penulis postingan asli tampaknya masih berada di fase itu
      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 auto adalah 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 menjengkelkan
    • Saya sudah melihat banyak kode buruk yang dibuat oleh orang yang baru saja mempelajari suatu fitur lalu ingin memakainya
      Jangan 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 berguna
    • Pengalaman saya dengan C++ juga persis seperti ini
      Awalnya 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
    • C++, seperti kebanyakan teknologi, bekerja lebih baik kalau Anda benar-benar berusaha mempelajarinya dengan baik
      Tentu saja ada bahasa seperti Python atau Ruby yang agak menyimpang dari kecenderungan ini
    • ChatGPT atau Copilot sangat membantu untuk hal-hal seperti itu
      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 unsafe yang tidak perlu; itu menjadi salah satu proyek paling menyiksa yang pernah saya kerjakan
    Mudah 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

    • Hampir semua bahasa selain C tidak membuat setiap v[x]=y menjadi undangan bagi korupsi memori acak
      std::optional di C++ akan menjadi undefined behavior jika *v dipanggil saat v kosong
      Inti 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::function yang kosong dulu melempar assert, tetapi std::copyable_function yang baru justru menjadikannya undefined behavior
    • Saya sulit setuju dengan pernyataan itu
      Sistem 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::array terus ditambahkan tanpa pernah bisa menyingkirkan cara lama
      Ketergantungan 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
    • Itu benar, tetapi semakin rumit suatu bahasa, semakin mudah pula membuat kekacauan yang tidak bisa dipahami
      Sebaliknya, proyek dalam bahasa blub yang sederhana biasanya cukup mudah diuraikan, tak peduli bagaimana keadaan codebase-nya
    • Sudah tua, tetapi C++ FQA ini cukup lucu untuk dijadikan rujukan: https://yosefk.com/c++fqa/
  • 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

    • Setuju
      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
    • Salah satu hal yang membuat C++ lebih bisa ditoleransi seiring waktu adalah bahwa kini semakin mudah untuk secara alami mengganti sebagian besar hal dengan implementasi yang berjalan seperti yang kita pikirkan dan perilakunya cukup terdefinisi dengan baik
      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++
    • Dalam proyek turunan Ultima yang saya buat dengan C++/SDL2, saya hanya mengambil beberapa fitur C++
      Sayangnya tidak sempat saya selesaikan, tetapi yang saya ingat antara lain kelas, std::function, std::unordered_map, std::string, dan std::unique_ptr
      Kalau 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
    • C++ benar-benar berantakan
      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
    • Bukankah Rust juga bahasa yang berusaha memberikan tingkat kontrol dan low-level yang sama seperti C?
      Kalau segel unsafe dibuka, 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

    • cppreference.com, sesuai namanya, sangat luar biasa sebagai dokumentasi referensi
      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
    • Setelah belajar C++ di sekolah dan universitas, saya langsung beralih ke Python/JavaScript untuk pekerjaan, dan tulisan ini membantu mengisi banyak hal tentang C++ yang belum saya tahu
      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

    • Hidup saya sebagai pengembang dimulai dengan PHP, dan saya belajar sambil bekerja membuat tema WordPress kustom dengan plugin untuk tipe data khusus
      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
    • Dalam syarat berupa codebase lama yang telah berevolusi selama 20~30 tahun atau tidak dipelihara oleh orang-orang yang kompeten, saya tidak terpikir bahasa lain yang hasilnya tidak mengerikan
      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::regex sulit disebut bagus.
    Performanya buruk dan dukungan Unicode-nya juga kurang, jadi umumnya lebih baik dihindari.

    • Bahkan linter yang dipakai di perusahaan kami juga memaksa agar tidak menggunakan std::regex
    • Saya penasaran apakah ada masalah pada spesifikasi yang menyebabkan penurunan performa
  • Saya 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.

    • Dalam pekerjaan saya bolak-balik memakai C++ dan Rust, dan sejujurnya di C++20/23 modern banyak titik sakit yang diperbaiki dengan cara yang nyaris meniru Rust.
      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 const alih-alih default, dan untuk menjamin noexcept kita 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 nostd secara 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.
    • Warisan itu sangat besar, bukan hanya aplikasi yang ditulis dalam C++, tetapi juga dalam banyak dimensi lain.
      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
    • C++ masuk akal ketika dibutuhkan latensi rendah tetapi ketepatan tidak terlalu dipedulikan.
      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.
    • HFT juga mungkin