Tooling dan Tata Kelola

Perencanaan carbon format dan carbon update serta proses keputusan melalui RFC.

Daftar isi

Topik ini membahas sisi pelaksana desain Carbon, yaitu toolchain yang sedang dibangun beserta perintah-perintahnya, kemudian proses keputusan bahasa melalui proposal dan RFC, yaitu request for comments yang meminta komentar terbuka dari komunitas. Pembahasan mencakup kedudukan driver dan perintahnya, status carbon format serta carbon update secara jujur, dan struktur tata kelola yang memutuskan perubahan. Setelah membacanya, kabar tentang alat Carbon dapat dinilai menurut status implementasinya, bukan menurut judul pengumumannya.

Driver dan perintah toolchain#

Toolchain Carbon tersusun dari tahapan yang berurutan, yaitu lex, parse, check, lower, dan codegen, dan arsitekturnya didokumentasikan pada direktori toolchain di repositori. Alat yang menggerakkan tahapan itu adalah driver, yaitu program carbon yang menyediakan subcommand dan menyatukan alur kompilasi. Dokumen driver memberi contoh pemanggilan carbon compile --phase=lower <file> untuk menjalankan alur hingga tahap tertentu, serta opsi dump seperti --dump-raw-sem-ir yang mencetak keluaran antara dalam format YAML.

Perintah pada driver dapat dibaca langsung dari kode sumber trunk. Driver mendaftarkan subcommand compile, build, link, config, format, language_server, clang, lld, llvm, dan runtimes, sehingga bentuk perintah berikut merupakan bentuk yang dirancang untuk digunakan pengembang.

bash
# tidak-dijalankan
# mengompilasi satu berkas sumber hingga tahap lower
carbon compile --phase=lower geometri.carbon
# memformat berkas sumber dan menulis hasilnya ke keluaran standar
carbon format --output=- geometri.carbon
# menggabungkan berkas objek menjadi satu program
carbon link geometri.o -o geometri

Compiler Explorer menawarkan dua alat untuk bahasa Carbon saat ini, yaitu “Explorer (trunk)” yang menjadi alat eksekusi pada seluruh topik jalur ini dan “x86_64 Carbon (trunk)” yang menjalankan toolchain sungguhan untuk menghasilkan kode mesin. Kedua nama tersebut dapat dilihat langsung pada daftar pilihan alat di compiler-explorer.com. Kehadiran pilihan kedua membuktikan bahwa toolchain produksi benar-benar sedang dibangun, sekaligus menegaskan bahwa kemampuannya belum setara dengan Explorer, misalnya alat toolchain tersebut belum menerima deklarasi package Konversi api; yang berjalan mulus di Explorer.

carbon format dan statusnya#

Pemformat sumber Carbon sudah hadir sebagai subcommand pada driver trunk. Subcommand format diatur pada berkas sumber format_subcommand.cpp pada trunk, yang menerima satu atau lebih berkas sumber Carbon dan menyediakan opsi --output untuk menulis hasil pemformatan ke berkas lain atau ke keluaran standar melalui nilai -. Dokumen desain tentang berkas sumber juga menyebut pemformat sebagai bagian rencana, yaitu kalimat bahwa pemformat sumber Carbon akan mengonversi berkas ke bentuk normalisasi Unicode NFC bila diperlukan, sehingga pemformatan dan normalisasi berkas digabung dalam satu alat.

Statusnya perlu dibaca secara berlapis. Subcommand format ada di kode trunk, tetapi contoh pemanggilannya pada topik ini ditandai tidak dijalankan karena toolchain tidak tersedia di sandbox lokal dan Compiler Explorer tidak menyediakan layanan pemformatan. Proposal Trailing comments yang diterima pada trunk juga sudah menyebut perilaku carbon format secara spesifik, misalnya pemformatan yang mempertahankan komentar di baris yang dianotasinya, sehingga arah desain alat ini sudah mulai diikat oleh proposal yang diterima.

carbon update dan pemutakhiran versi#

Rencana alat pemutakhiran dinyatakan pada FAQ proyek. Carbon akan menyediakan tooling untuk membantu pemutakhiran kode ketika sintaks bahasa berubah, dan FAQ memberi contoh konkret, yaitu alat yang mengganti pemakaian pengenal except menjadi pengenal mentah r#except apabila kata itu menjadi kata kunci baru pada versi berikutnya. README proyek merangkum tujuan yang sama dari sisi pengguna, yaitu pemutakhiran antar versi Carbon yang mudah dan berbasis alat, sehingga biaya evolusi bahasa bergeser dari pengembang ke alat.

Status implementasinya belum ada. Driver trunk tidak mendaftarkan subcommand update, dan FAQ menyatakan secara eksplisit bahwa alat pemutakhiran belum siap selama Carbon masih dalam pengembangan awal, lalu mengaitkan kesiapannya dengan syarat Carbon dinyatakan siap dipakai. Posisi ini konsisten dengan skema versioning pada topik Semantik Package, karena pemutakhiran yang murah memang sengaja menjadi kompensasi atas kebebasan membuat perubahan yang memutus kompatibilitas.

Keputusan melalui proposal dan RFC#

Perubahan signifikan pada Carbon diputuskan melalui proses evolusi yang didokumentasikan pada docs/project/evolution.md. Setiap proposal berbentuk pull request yang menambahkan dokumen ke direktori proposals mengikuti templat resmi, dan prosesnya dimulai dari mode draft. Ketika penulis menandainya siap ditinjau, proposal dirutekan ke satu Carbon lead untuk ditinjau dan disebarkan sebagai RFC kepada komunitas. Reaksi dan komentar komunitas mengalir pada pull request itu sendiri, sedangkan pertanyaan yang menghambat dipindahkan ke isu pemblokiran yang diputuskan para lead.

Keputusan akhir dipegang struktur tata kelola yang kecil dan tertulis. Carbon leads meninjau proposal, menetapkan peta jalan, dan memutuskan isu pemblokiran dengan mekanisme konsensus pemblokiran berkuorum dua, sedangkan peran khusus bernama painter hanya memutuskan hal yang murni soal selera dan tidak memiliki dasar data. FAQ menegaskan maksud struktur ini, yaitu Carbon tetap proyek yang digerakkan komunitas dan menghindari satu organisasi yang mengendalikan arahnya. Direktori proposals pada trunk hanya memuat proposal yang diterima, sehingga proposal yang ditolak atau ditangguhkan hanya dapat dilacak pada pull request aslinya.

Ringkasan#

  • Driver trunk mendaftarkan subcommand compile, build, link, config, format, language_server, dan lainnya, sedangkan subcommand update belum ada.
  • carbon format sudah hadir pada kode driver trunk dengan opsi --output, dan pemformat sumber direncanakan mengonversi berkas ke bentuk NFC.
  • carbon update berstatus direncanakan, karena FAQ menyatakan alat pemutakhiran belum siap selama Carbon berada dalam pengembangan awal.
  • Perubahan signifikan diputuskan melalui proposal berbentuk pull request yang melewati RFC komunitas, isu pemblokiran, dan persetujuan Carbon leads.

Referensi#