10 poin oleh GN⁺ 2024-11-26 | 3 komentar | Bagikan ke WhatsApp
  • Mimpi tentang satu C++ tunggal tanpa dialek tampaknya sudah lama sirna
  • Ada banyak perdebatan tentang masa depan C++ di Reddit, situs web berwarna oranye itu (HN), dan juga dalam rapat resmi komite standar C++

Keadaan C++ Saat Ini

  • Evolution Working Group (EWG) C++ sepakat untuk mengadopsi P3466 R0.
    • Menjaga kompatibilitas penautan dengan C dan C++ lama tanpa memutus ABI (Application Binary Interface).
    • Tidak menggunakan 'viral annotations'.
    • Tetap mempertahankan tujuan yang saling bertentangan: tidak memutus ABI dan prinsip zero-overhead.
  • Pemerintah AS merekomendasikan untuk berhenti menggunakan C++.
    • Berbagai lembaga seperti CISA, NSA, dan Gedung Putih telah mengeluarkan peringatan tentang penggunaan bahasa yang tidak aman terhadap memori.
  • Perusahaan teknologi besar sedang mengadopsi Rust.
    • Microsoft, Google, dan AWS menggunakan Rust.
    • Google bahkan mengembangkan alat interoperabilitas C++/Rust
  • Konflik internal di dalam komunitas C++
    • Ada kabar bahwa Herb Sutter meninggalkan Microsoft dan MSVC lambat dalam mengimplementasikan fitur C++23.
    • Google mengurangi partisipasinya dalam proses pengembangan C++ dan sedang mengembangkan bahasa penerus C++ versinya sendiri.
    • Kurangnya kepercayaan terhadap proses komite standar C++ yang ada
    • Fitur modules masih belum selesai
    • 'Safety Profiles'(‘Safety Profiles’) berada dalam situasi yang aneh

Dua Kultur C++

  • Kelompok yang menggunakan alat modern dan otomatis
    • Perusahaan teknologi besar seperti Google adalah contoh utamanya
    • Menggunakan standar C++ terbaru (C++17 ke atas), dengan dukungan alat build dan pengujian otomatis
    • Berinvestasi untuk menjaga kualitas kode dan terus memodernisasi codebase
  • Kelompok C++ legacy
    • Codebase yang berjalan di lingkungan dan alat lama
    • Beroperasi tanpa source code atau dengan sistem build yang usang
    • Biaya pemeliharaan tinggi dan hambatan modernisasi besar
  • Perbedaan utama ada pada alat dan proses
    • Kelompok C++ modern bergantung pada sistem build terintegrasi dan alat seperti static analyzer, formatter, linter, dan lainnya
    • Kelompok legacy memiliki efisiensi operasional yang rendah karena tidak adanya alat dan proses semacam itu

Hasil dan Dampaknya

  • Safety Profiles
    • Bertujuan meningkatkan keamanan tanpa mengubah kode legacy yang sudah ada
    • Lebih berfokus pada pemeliharaan kode lama daripada kebutuhan C++ modern
  • Modules
    • Dirancang agar header file bisa dibawa masuk ke modules dengan sederhana
    • Dirancang dengan mempertimbangkan kompatibilitas dengan kode legacy
  • Perpecahan komunitas C++
    • Konflik dalam komunitas makin dalam karena ketidaksesuaian kebutuhan antara kelompok modern dan legacy
    • Pendekatan konservatif komite standar C++ tampak sebagai upaya untuk meredakan konflik tersebut

Sudut Pandang Alternatif

  • Gagasan alternatif seperti Safe C++ tidak disambut baik di dalam komunitas
  • Ada kritik bahwa sebagian anggota komite standar bersikeras mempertahankan standar estetika pribadi dan menolak perubahan

3 komentar

 
aer0700 2024-11-27

Rust masih belum punya ekosistem pengembangan GUI, jadi saya belum bisa mengadopsinya.
Semoga ada framework GUI yang bagus untuk Rust...

 
ndrgrd 2024-11-26

Saya tidak yakin apakah Rust bisa menggantikan C++,
tetapi memang benar bahwa proyek C++ baru hampir tidak terlihat...
Tampaknya komite C++ memutuskan bahwa arah yang tepat adalah lebih mengutamakan nilai aslinya daripada bertransformasi.

 
GN⁺ 2024-11-26
Opini Hacker News
  • Kode C++ Google sering kali tidak berjalan pada versi terbaru, dan para pengembang kerap tidak berminat memperbaikinya. Ini karena kode Google berada di titik tengah antara yang lama dan yang modern

    • Kode C++ Google dapat mengalami korupsi memori akibat state machine dan weak pointer manual
    • Memandang positif kepergian Google dari ekosistem C++
    • Berpendapat minat Google terhadap ekosistem Rust tidak akan berdampak positif
  • Menyarankan para penggarap standar C++ untuk mendukung arah C++ saat ini dan mengabaikan kebisingan online tentang masa depan C++

    • Merekomendasikan orang yang menginginkan pemeriksaan lifetime statis untuk memakai Rust
    • Menyarankan kontraktor pemerintah untuk menggunakan Rust
    • Mengklaim proses pengembangan C++ yang ada saat ini bekerja dengan baik
  • Mengklaim satu-satunya kelompok yang masih memakai C++ adalah mereka yang memiliki codebase legacy terlalu besar untuk direfaktor

    • Kelompok lain yang telah kehilangan kepercayaan pada WG21 sedang berpindah ke bahasa baru
    • Menyebut Herb Sutter mengatakan bahwa menambahkan anotasi lifetime ke C++ akan menciptakan "jalur keluar" ke bahasa lain
  • Menilai sistem edition di Rust bekerja sangat baik

    • Mengusulkan bahwa jika sistem seperti ini diperkenalkan ke C++, mungkin akan ada batasan pada batas modul, tetapi itu bisa menjadi cara yang memuaskan kedua kubu
  • Khawatir kabar Herb Sutter meninggalkan Microsoft akan berdampak buruk bagi Microsoft

    • Menilai Herb memimpin adopsi standar C++ dan berupaya mewujudkan visi masa depan yang lebih baik
    • Menyebut std::span, usulan dari Microsoft, diadopsi tanpa pemeriksaan batas, dan berpendapat upaya Herb sangat dibutuhkan
  • Menekankan bahwa pengujian otomatis adalah faktor utama yang membedakan kedua kubu

    • Menjelaskan bahwa pada aplikasi C++ legacy, tanpa pengujian otomatis, perubahan kode berisiko merusak aplikasi
    • Memperingatkan bahwa karena sifat C++, perubahan kode yang tampak tidak berbahaya pun bisa menimbulkan masalah
  • Mengklaim faktor utama yang menurunkan daya tarik C++ adalah ketiadaan modul

    • Menilai bahwa jika modul sudah ada, komunitas C++ mungkin bisa terbentuk
  • Membandingkan bahwa Herb Sutter mahir menghasilkan kompromi, sedangkan Google mendorong agendanya sendiri

  • Menyebut pelanggan dengan codebase besar bahkan tidak ingin mengubah 1% pun dari kodenya demi memenuhi aturan yang ketat

    • Mengklaim banyak perusahaan meluangkan waktu untuk upgrade ke standar baru
  • Menjelaskan bahwa Python dan Javascript/Node/Typescript juga memiliki beberapa kubu

    • Menilai Rust berusaha menghindari perpecahan seperti itu, tetapi kurva belajarnya menjadi tinggi
    • Menyebut Go mencoba mencegah perpecahan dan mencapai adopsi luas, tetapi tetap harus memperkenalkan generics