Topik ini memisahkan dua hal yang mudah tercampur ketika membahas Carbon, yaitu kemampuan interop yang dapat didemonstrasikan hari ini dan kemampuan interop yang baru berupa desain tertulis. Setelah membacanya, batas antara keduanya dapat ditarik dengan eksperimen kecil yang dapat diulang sendiri, bukan dengan perkiraan. Eksperimennya menggunakan Carbon Explorer pada compiler-explorer.com, satu-satunya lingkungan eksekusi Carbon yang mudah dijangkau tanpa memasang apa pun.
Yang dapat dicoba di Explorer hari ini#
Carbon Explorer pada compiler-explorer.com menjalankan interpreter untuk bahasa inti Carbon, sehingga program kecil yang hanya menggunakan fitur inti dapat dieksekusi langsung dari browser tanpa memasang toolchain apa pun. Program di bawah ini mendeklarasikan package sample api, mendefinisikan fungsi Main yang mengembalikan i32, dan menulis satu baris teks dengan Print.
package sample api;
fn Main() -> i32 {
Print("halo dari Carbon");
return 0;
}halo dari Carbon
result: 0Keluaran tersebut memuat dua informasi yang perlu dibedakan. Teks halo dari Carbon adalah keluaran program, yang ditulis Print tanpa menambahkan baris baru, sehingga keluaran berikutnya akan menyambung pada baris yang sama. Baris result: 0 adalah catatan milik Compiler Explorer pada akhir keluaran, dan bukan bagian dari program Carbon itu sendiri. Program semacam ini membuktikan bahwa alat eksekusinya berfungsi, tetapi tidak menyentuh interop sama sekali.
Eksperimen kecil pada sintaks interop#
Batas tersebut dapat diuji dengan mengeksekusi sintaks interop dari dokumen desain di Explorer. Program di bawah ini menggunakan deklarasi impor dari dokumen interoperabilitas, yaitu import Cpp library "<cstdio>", lalu memanggil fungsi C++ putchar melalui package Cpp sebagaimana dicontohkan dokumen desain.
package sample api;
import Cpp library "<cstdio>";
fn Main() -> i32 {
Cpp.putchar(72);
return 0;
}COMPILATION ERROR: <source>:6: could not resolve 'Cpp'Hasilnya informatif justru karena gagal. Baris impor import Cpp library "<cstdio>" diterima sebagai deklarasi tanpa keluhan, tetapi pemanggilan Cpp.putchar ditolak dengan pesan error bahwa nama Cpp tidak dapat diselesaikan. Artinya, sintaks desain interop dikenali oleh alat eksekusi, sedangkan mesin interop yang sesungguhnya belum ada di baliknya. Pesan error ini bukan bukti bahwa desain interop Carbon gagal, melainkan bukti bahwa pilar tersebut belum sampai ke alat yang dicoba.
Memisahkan klaim desain dari bukti eksekusi#
Pemisahan ini penting karena proyek Carbon sedang berada di tengah peralihan. README proyek mencatat bahwa prototipe interpreter lama telah diarsipkan dan pengembangan kini terkonsentrasi pada toolchain yang sesungguhnya. Roadmap resmi menetapkan fokus 2025 pada demonstrasi interop C++ dalam skenario realistis, dengan sasaran utama mengakses mayoritas API C++ non-template dari Carbon, sedangkan arah sebaliknya dari Carbon ke C++ dinyatakan sebagai sasaran yang lebih ambisius.
Sisi implementasi juga sudah bergerak pada tingkat proposal. Proposal p006358 menetapkan semantik impor API C++, termasuk sintaks import Cpp library dan package Cpp, sedangkan proposal p006254 merinci implementasi toolchain untuk memanggil fungsi C++ yang diimpor, lengkap dengan penanganan overload dan thunk penjembatan ABI. Keduanya tercantum sebagai rujukan resmi pada dokumen interop trunk. Perencanaan jangka panjangnya juga eksplisit, karena dokumen milestone menyatakan bahwa evaluasi milestone 0.1 menuntut kemampuan membangun dan menjalankan uji atas mayoritas interoperabilitas C++, sehingga pergeseran dari desain ke bukti eksekusi memang direncanakan, tetapi pada milestone yang belum tercapai. Tabel berikut merangkum status setiap kemampuan yang dibahas pada topik ini dan pada modul ini secara umum.
| Kemampuan | Status hari ini | Sumber klaim |
|---|---|---|
Sintaks inti, misalnya fn, var, Print | dapat dieksekusi di Explorer | percobaan langsung pada topik ini |
| Pointer dasar, yaitu alamat dan dereferensi | dapat dieksekusi tanpa pemeriksaan keamanan | percobaan pada topik Checked Pointer |
| Impor dan pemanggilan API C++ | desain dan implementasi toolchain sedang dikerjakan | dokumen interop, roadmap, proposal p006254 |
| Pemeriksaan keamanan memori | desain yang dipublikasikan, belum diimplementasi | dokumen keamanan dan pembaruan diskusi keamanan |
Ringkasan#
- Explorer menjalankan interpreter bahasa inti, sehingga program dengan
package sample apidanPrintdapat dieksekusi, sedangkan pemanggilan API C++ yang diimpor gagal dengan pesancould not resolve 'Cpp'. - Kegagalan tersebut menunjukkan bahwa sintaks desain interop dikenali alat eksekusi, tetapi mesin interop yang sesungguhnya belum tersedia di sana.
- Klaim interop hari ini bersumber dari dokumen desain, roadmap 2025 tentang demonstrasi interop C++ skenario realistis, dan proposal
p006254sertap006358pada trunk. - Pemisahan antara yang dapat dieksekusi dan yang baru desain merupakan kebiasaan literasi yang diterapkan pada seluruh topik modul ini.
Referensi#
- Compiler Explorer — godbolt.org — Lingkungan daring tempat seluruh keluaran program Carbon pada topik ini dieksekusi.
- README repositori carbon-lang — Proyek Carbon — Mencatat status eksperimental, pengarsipan prototipe interpreter lama, dan arahan kontribusi ke toolchain menuju interop Carbon dan C++.
- Roadmap — Proyek Carbon — Menetapkan sasaran 2025 berupa demonstrasi interop C++ skenario realistis dan rincian cakupan API non-template.
- Milestones — Proyek Carbon — Menyatakan syarat milestone 0.1 berupa uji interoperabilitas C++ yang dapat dibangun dan dijalankan evaluator.
- C++ Interop: API importing and semantics — Proyek Carbon
— Proposal yang menetapkan semantik impor API C++ dan
packageCpp. - C++ Interop: Toolchain implementation for function calls — Proyek Carbon — Proposal yang merinci implementasi pemanggilan fungsi C++ dari Carbon beserta thunk penjembatan ABI.