Interop Hari Ini versus Desain

Memisahkan yang dapat didemonstrasikan Explorer hari ini dari yang baru berupa desain.

Daftar isi

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.

carbon sapa-explorer.carbon
package sample api;

fn Main() -> i32 {
  Print("halo dari Carbon");
  return 0;
}
text Keluaran
halo dari Carbon
result: 0

Keluaran 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.

carbon cek-interop.carbon
package sample api;

import Cpp library "<cstdio>";

fn Main() -> i32 {
  Cpp.putchar(72);
  return 0;
}
text Keluaran
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.

KemampuanStatus hari iniSumber klaim
Sintaks inti, misalnya fn, var, Printdapat dieksekusi di Explorerpercobaan langsung pada topik ini
Pointer dasar, yaitu alamat dan dereferensidapat dieksekusi tanpa pemeriksaan keamananpercobaan pada topik Checked Pointer
Impor dan pemanggilan API C++desain dan implementasi toolchain sedang dikerjakandokumen interop, roadmap, proposal p006254
Pemeriksaan keamanan memoridesain yang dipublikasikan, belum diimplementasidokumen keamanan dan pembaruan diskusi keamanan

Ringkasan#

  • Explorer menjalankan interpreter bahasa inti, sehingga program dengan package sample api dan Print dapat dieksekusi, sedangkan pemanggilan API C++ yang diimpor gagal dengan pesan could 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 p006254 serta p006358 pada trunk.
  • Pemisahan antara yang dapat dieksekusi dan yang baru desain merupakan kebiasaan literasi yang diterapkan pada seluruh topik modul ini.

Referensi#