Bahasa yang Dirancang untuk Pembacanya
Sebagian besar bahasa pemrograman dirancang untuk manusia. Grammar-nya mengutamakan hal yang penting bagi manusia: sintaks yang ringkas, idiom yang ekspresif, dan jalan pintas yang "elegan". Compiler menulis pesan error dalam bentuk kalimat karena yang membacanya manusia. Standard library disusun dengan cara yang mudah diingat oleh penulisnya.
Zero berangkat dari asumsi yang berbeda. Pembaca utamanya adalah agen AI, yaitu model bahasa yang menulis, men-debug, dan memperbaiki kode atas nama seseorang. Manusia tetap terlibat, tetapi desain bahasanya memperlakukan agen sebagai pengguna utama sejak hari pertama. Satu perubahan itu berdampak pada hampir setiap fitur bahasa yang terlihat.
Zero dibuat oleh Vercel Labs, punya situs di zerolang.ai, dan kodenya open source di github.com/vercel-labs/zero. File sumbernya berakhiran .0.
Lima hal dalam potongan kode itu, yaitu pub, World, raises, check, dan world.out.write yang eksplisit, sudah banyak menunjukkan cara berpikir Zero. Kita akan membahas masing-masing di bawah.
"Semuanya Eksplisit"
Slogan tidak resmi di dokumentasi Zero adalah semuanya eksplisit. Bahasa ini sengaja menghindari mekanisme tersembunyi yang membuat bahasa sistem lain nyaman bagi manusia, tetapi menjebak bagi generator kode:
- Tidak ada garbage collector yang wajib.
- Tidak ada allocator tersembunyi.
- Tidak ada runtime async implisit.
- Tidak ada variabel global ajaib: tidak ada
stdoutyang selalu tersedia, tidak adaprocess.env, tidak ada akses filesystem implisit.
Apa pun yang dilakukan sebuah fungsi terhadap dunia luar harus terlihat di signature-nya. Bagi manusia, itu berarti banyak mengetik. Bagi agen yang sedang menalar apa yang sebenarnya dilakukan sebuah fungsi, itu sangat membantu.
Capability, Bukan Variabel Global
Cara Zero menangani I/O adalah contoh paling jelas dari filosofi ini. Tidak ada fungsi print global. Output terjadi lewat nilai World yang diberikan runtime ke main:
pub fun main(world: World) -> Void raises {
check world.out.write("hello\n")
}
Kalau sebuah fungsi yang jauh di dalam call stack ingin menulis baris log, fungsi itu harus menerima World (atau capability yang lebih sempit) secara eksplisit. Kamu bisa membaca signature sebuah fungsi dan tahu, tanpa membaca isinya, apakah fungsi itu mungkin menyentuh jaringan, filesystem, atau stdout. Sifat seperti inilah yang bisa diandalkan oleh static analyzer (atau agen yang sedang melakukan code review).
Capability World membahas ide ini lebih dalam.
Kegagalan yang Eksplisit dengan raises dan check
Fungsi yang bisa gagal harus menyatakannya. Pemanggil yang memanggil fungsi yang bisa gagal harus mengakuinya. Tidak ada error yang dilempar diam-diam:
raises { InvalidInput } pada validate berarti "fungsi ini bisa gagal dengan InvalidInput". check di tempat pemanggilan berarti "kalau ini gagal, teruskan error-nya ke atas". Kamu tidak bisa tanpa sengaja mengabaikan sebuah error: error itu muncul di signature fungsimu, atau compiler akan menghentikanmu. Baca Raises dan Check untuk penjelasan lengkapnya.
Compiler yang Berbicara dengan Agen
Bagian paling khas dari Zero bukan fitur sintaks, melainkan output compiler-nya. Jalankan zero check --json pada program yang rusak, dan kamu akan mendapat hasil seperti ini:
{
"ok": false,
"diagnostics": [
{
"code": "NAM003",
"message": "unknown identifier",
"line": 3,
"repair": { "id": "declare-missing-symbol" }
}
]
}
Ada tiga hal yang membuatnya berbeda dari error compiler biasa:
- Kode error yang stabil.
NAM003berarti "unknown identifier" hari ini, dan akan tetap berarti sama persis di versi compiler berikutnya. Agen bisa mencocokkan kode tersebut tanpa harus mengurai kalimat bahasa Inggris. - Metadata perbaikan yang terstruktur. Field
repairmenyebutkan jenis perbaikan yang menurut compiler bisa menyelesaikan error tersebut. Agen bisa mengambil rencananya denganzero fix --plan --jsonlalu menerapkannya. - Tidak perlu mengurai kalimat. Intinya, agen tidak perlu menafsirkan pesan yang ditulis untuk manusia demi memutuskan langkah berikutnya.
Diagnostik JSON membahas formatnya secara detail.
Sengaja Dibuat Kecil
Grammar Zero kecil dan teratur, lebih mirip C versi awal daripada bahasa yang serba ada seperti Scala atau C++ modern. Alasannya praktis: agen seharusnya bisa memahami seluruh bahasa dalam satu sesi tanpa salah langkah di kasus-kasus tepi.
Artinya, kamu akan menemukan:
- Satu cara untuk mendeklarasikan fungsi (
funataupub fun). - Satu cara untuk mengikat nilai lokal (
let). - Satu cara untuk memodelkan product type (
shape), satu cara untuk memodelkan sum type (choice), dan satu cara untuk enumerasi biasa (enum). - Satu konstruksi pattern matching (
match). - Satu konstruksi perulangan di versi awal bahasa ini (
while).
Yang tidak akan kamu temukan, setidaknya di tahap ini, adalah operator overloading, konversi implisit, macro, decorator, atau tiga cara yang saling bersaing untuk mengungkapkan ide yang sama. Itu bukan soal hidup sederhana, melainkan pilihan yang disengaja agar bahasanya cukup kecil sehingga agen jarang memilih varian yang salah.
Yang Bukan Zero
Supaya ekspektasimu tepat:
- Bukan bahasa scripting. Zero dikompilasi menjadi binary native. Programnya kecil (dokumentasinya menyebut executable di bawah 10KB) dan tidak membawa runtime.
- Bukan Rust, bukan Go, bukan Zig. Sintaksnya punya leluhur yang sama, tetapi prioritasnya berbeda. Rust mengutamakan keamanan memori dengan sistem tipe yang canggih, sedangkan Zero mengutamakan kemudahan dipelajari oleh agen dengan sistem tipe yang sengaja dibuat sangat kecil.
- Belum stabil. Zero masih di bawah 1.0. Timnya terang-terangan menyatakan bahwa perubahan yang merusak kompatibilitas akan tetap dirilis jika membantu tujuan yang mengutamakan agen. Jangan mengandalkannya untuk hal yang serius dulu.
- Bukan fitur platform deployment Vercel. Meskipun berasal dari Vercel Labs, Zero tidak terikat dengan Next.js atau hosting Vercel. Zero adalah bahasa sistem yang berdiri sendiri.
Kapan Kamu Bisa Mencoba Zero Sekarang
Kamu bisa mencoba Zero sekarang kalau kamu tertarik pada:
- Bagaimana sebuah bahasa berubah ketika batasan desainnya berasal dari agen, bukan dari manusia.
- Bereksperimen dengan I/O berbasis capability tanpa harus memakai bahasa riset.
- Melihat seperti apa "output compiler yang terstruktur" ketika dijadikan fitur utama, bukan tambahan belakangan.
- Memberi masukan kepada Vercel Labs untuk proyek yang sedang aktif berkembang.
Lewati dulu Zero kalau kamu butuh bahasa yang stabil untuk pekerjaan nyata, ingin ekosistem library yang matang, atau butuh tooling lintas platform selevel Rust atau Go.
Berikutnya: Install Zero
Dokumen berikutnya memandu kamu meng-install toolchain Zero dan meng-compile program pertamamu. Seluruh prosesnya hanya butuh sekitar satu menit.
Pertanyaan yang sering diajukan
Apa itu bahasa pemrograman Zero?
Zero adalah bahasa pemrograman sistem eksperimental dari Vercel Labs yang dirancang agar agen AI menjadi pengguna utama di samping manusia. Sintaksnya kecil dan teratur, efeknya eksplisit lewat capability World, dan compiler-nya menghasilkan diagnostik JSON terstruktur serta rencana perbaikan yang bisa dibaca mesin dan langsung dipakai oleh agen.
Siapa pembuat Zero, dan apakah ini produk resmi Vercel?
Zero berasal dari Vercel Labs, divisi riset Vercel. Zero adalah eksperimen terbuka yang di-host di github.com/vercel-labs/zero, bukan produk Vercel yang stabil. README-nya dengan jelas menyebut versinya masih di bawah 1.0 dan memperingatkan agar tidak menjalankannya di production atau dengan data sensitif.
Apakah Zero adalah 'bahasa untuk agen'?
Ya. Inti dari Zero adalah merancang bahasa yang kodenya bisa dibaca, dibuat, di-debug, dan diperbaiki dengan andal oleh agen AI, bukan hanya oleh manusia. Tujuan itu membentuk semuanya, mulai dari grammar yang kecil dan teratur sampai output JSON dari compiler dan kode error yang stabil seperti NAM003.
Seperti apa file sumber Zero?
File sumber memakai ekstensi .0. Program minimal terlihat seperti ini: pub fun main(world: World) -> Void raises { check world.out.write("hello\n") }. Parameter World adalah objek capability yang kamu pakai untuk I/O, sedangkan raises dan check membuat operasi yang bisa gagal menjadi eksplisit.
Apakah Zero siap dipakai di production?
Belum. Zero masih di bawah versi 1.0 dan secara terang-terangan bersifat eksperimental. Compiler, standard library, dan sintaksnya masih terus berubah. Timnya menyarankan agar Zero hanya dijalankan di lingkungan yang terisolasi. Pakai Zero untuk belajar, membuat prototipe, dan memberi masukan, bukan untuk merilis software yang dipakai pelanggan.