Makna Bahasa Penerus

Definisi bahasa penerus: jalur migrasi, peminjaman ekosistem, dan batasannya.

Daftar isi

Topik ini merumuskan makna istilah bahasa penerus (successor language) sebagaimana digunakan proyek Carbon, lengkap dengan lima syarat yang melekat padanya, preseden yang dijadikan rujukan, dan batasan yang mengikuti pilihan pendekatan tersebut. Setelah membacanya, pendekatan penerus dapat dibedakan dari dua jalur lain dalam memperbarui bahasa C++, dan kelayakannya dapat dinilai per konteks basis kode. Seluruh definisi diambil dari dokumen resmi proyek Carbon serta dokumentasi resmi bahasa-bahasa presedennya.

Syarat yang melekat pada sebuah bahasa penerus#

README proyek menyebut Carbon secara langsung sebagai successor language C++, bukan usaha evolusi bertahap dari dalam C++. Artinya, bahasa baru dibangun tanpa terikat aturan lama, sedangkan keterhubungan dengan bahasa lama menjadi syarat yang ditetapkan sejak awal desain. README menegaskan bahwa sebuah bahasa penerus C++ menuntut lima hal sekaligus, dan kelimanya dipakai sebagai tolok ukur menilai setiap keputusan desain Carbon.

  • performa yang menyamai C++, dengan dukungan LLVM serta akses tingkat rendah ke bit dan alamat memori
  • interop dua arah yang mulus dengan C++, sehingga satu library di posisi mana pun pada basis kode C++ dapat mengadopsi Carbon tanpa memindahkan sisanya
  • kurva belajar yang landai dengan keakraban yang masuk akal bagi pengembang C++
  • ekspresivitas yang sebanding, agar arsitektur perangkat lunak yang sudah ada tetap dapat ditulis secara alami
  • migrasi yang dapat diskalakan, termasuk penerjemahan sumber ke sumber (source-to-source) untuk kode C++ yang idiomatik

Syarat interop dua arah adalah pembeda terpentingnya. Dokumen tujuan proyek merinci sasarannya, yaitu basis kode C++ besar dengan ratusan juta baris dapat dipindahkan secara bertahap, dan satu library dapat beralih ke Carbon tanpa menunggu library dependensinya maupun dependen pindah lebih dahulu. Dengan kata lain, ekosistem C++ yang ada dipinjam sebagai fondasi adopsi, bukan digantikan sekaligus.

Preseden TypeScript dan Kotlin#

README menunjuk dua preseden yang mengikuti model serupa pada ekosistem lain, yaitu JavaScript yang dilanjutkan TypeScript dan Java yang dilanjutkan Kotlin. Pada kedua kasus itu, bahasa baru hidup berdampingan dengan bahasa lamanya dalam satu ekosistem yang sama, sehingga pemindahan dapat dilakukan per bagian tanpa memutus yang sudah berjalan.

Dokumentasi resmi keduanya menunjukkan pola yang sama secara konkret. TypeScript menawarkan seluruh fitur JavaScript ditambah satu lapisan sistem tipe di atasnya, sehingga kode JavaScript yang sudah berjalan sekaligus merupakan kode TypeScript yang sah. Kotlin didesain dengan interoperabilitas Java sebagai prinsip awalnya, dan dokumentasinya menyatakan hampir semua kode Java dapat digunakan tanpa masalah dari Kotlin. Keynote pengumuman Carbon pada konferensi CppNorth merangkum benang merahnya dengan tiga ciri, yaitu membangun di atas ekosistem yang ada tanpa memulai ekosistem baru, menyediakan interop dua arah, dan mengoptimalkan kurva belajar serta jalur adopsi.

Kedua preseden juga menunjukkan bahwa peminjaman ekosistem berjalan dua arah. Bahasa baru menggunakan package dan library yang sudah ada pada ekosistem lamanya, sementara bahasa lama dapat memanggil kode bahasa baru. Pada model inilah Carbon menempatkan dirinya, dengan target yang jauh lebih berat karena semantik C++ tidak memiliki satu runtime pusat seperti mesin Java maupun model objek JavaScript yang digunakan TypeScript.

Tiga jalur bagi basis kode C++#

Keputusan memperbarui basis kode C++ pada dasarnya memiliki tiga jalur, dan tabel berikut menyandingkan ketiganya sebagaimana digambarkan dokumen-dokumen resmi proyek.

JalurBentuknyaKonsekuensi utama
Evolusi di dalam C++fitur baru ditumpuk lewat standar ISO yang menjaga kompatibilitas mundurutang teknis dekade lama tetap terbawa dan bahasanya terus membesar
Bahasa penerusbahasa baru yang berdampingan lewat interop dua arah, misalnya Carbonmigrasi bertahap per library, tetapi desainnya terikat pada semantik C++
Bahasa lain yang berdiri sendiritulis ulang pada ekosistem baru, misalnya Rustfondasi aman sejak awal, tetapi README menilai desain bahasa tersebut menghadirkan hambatan adopsi dari C++, mulai dari perubahan idiom hingga biaya kinerja

Ketiga jalur itu sah dan dipilih sesuai konteks. README proyek bahkan menyatakannya secara eksplisit, bahwa pengembang yang dapat menggunakan salah satu bahasa modern seperti Go, Swift, Kotlin, atau Rust sebaiknya menggunakannya. Pendekatan penerus ditujukan bagi basis kode dan tim yang tidak dapat meninggalkan C++, misalnya karena investasi yang sudah tertanam di dalamnya.

Perbedaan ketiganya terletak pada apa yang dipertahankan dan apa yang ditulis ulang. Evolusi di dalam C++ mempertahankan seluruh kode dan biner yang ada, tetapi mewarisi pula seluruh utang teknisnya. Bahasa penerus mempertahankan kode dan investasi melalui interop, sementara fondasi bahasanya ditulis ulang dari nol. Bahasa lain yang berdiri sendiri menulis ulang kode beserta fondasinya, sehingga fondasi aman sejak awal diperoleh dengan biaya pemindahan ekosistem yang paling besar.

Batasan pendekatan penerus#

Pilihan penerus menetapkan batasan yang tidak dapat dihindari. README menyebut dua non-goal secara eksplisit, yaitu ABI (application binary interface) yang stabil untuk seluruh bahasa dan library, serta kompatibilitas maju maupun mundur yang sempurna. Melepas jaminan luas itu memberi kebebasan menata ulang bahasa hingga ke fondasinya, tetapi berarti biner antarversi tidak dijamin tetap cocok, dan pembaruan diarahkan melalui alat (tool-based upgrades) alih-alih janji kompatibilitas.

Batasan kedua bersifat desain. Dokumen interop menyatakan model semantik Carbon harus dirancang bersama (co-designed) dengan konstruksi C++, mulai dari template, hierarki kelas, hingga resolusi overload, karena interop yang diminta bukan sekadar foreign function interface tetapi integrasi pada tingkat semantik. Kebebasan merancang bahasa tanpa aturan lama dengan demikian dibayar dengan kompleksitas menyatukan dua aturan bahasa dalam satu kompilator.

Batasan ketiga bersifat status. Carbon berada pada tahap eksperimental dan belum siap dipakai. Peta jalan resmi menargetkan rilis 0.1 untuk evaluasi paling cepat pada akhir 2026 setelah mundur setidaknya satu tahun karena penambahan desain keamanan memori, dilanjutkan 0.2 pada rentang 2027 sampai 2028 dan 1.0 sebagai bahasa produksi setelah 2028. Semua angka tersebut adalah target proyek, bukan hasil yang sudah dicapai, sehingga penilaian terhadap pendekatan penerus harus selalu dikembalikan ke status terkini peta jalannya.

Ringkasan#

  • Bahasa penerus adalah bahasa baru yang berdampingan dengan bahasa lamanya, dengan lima syarat menurut README, yaitu performa setara, interop dua arah, kurva belajar landai, ekspresivitas sebanding, dan migrasi berskala besar.
  • Preseden TypeScript untuk JavaScript dan Kotlin untuk Java menunjukkan model peminjaman ekosistem yang sama, yaitu kode dan library lama tetap dipakai selama migrasi berlangsung per bagian.
  • Jalur penerus berbeda dari evolusi di dalam C++ maupun tulis ulang pada bahasa berdiri sendiri, dan ketiganya memiliki konsekuensi yang perlu ditimbang per konteks.
  • Batasannya nyata, yaitu ABI stabil dan kompatibilitas sempurna menjadi non-goal, desainnya terikat semantik C++, dan status proyek masih eksperimental dengan target 0.1 paling cepat akhir 2026.

Referensi#