Okuyucularına Göre Tasarlanmış Bir Dil
Çoğu programlama dili insanlar için tasarlandı. Gramerleri insanların önemsediği şeyleri optimize eder: kısa söz dizimi, ifade gücü yüksek deyimler, "şık" kısayollar. Compiler'lar hata mesajlarını düz metin olarak basar çünkü onları okuyan bir insandır. Standart kütüphaneler, yazarlarının akılda tutması kolay bulduğu şekilde düzenlenir.
Zero farklı bir varsayımdan yola çıkıyor. Öncelikli okuyucuları AI ajanları — birinin adına kod yazan, debug eden ve onaran dil modelleri. İnsanlar hâlâ döngüde, ancak dil tasarımı ilk günden itibaren ajanları birinci sınıf kullanıcı olarak ele alıyor. Bu tek değişim, dilin neredeyse her görünür özelliğine yayılıyor.
Zero, Vercel Labs tarafından geliştiriliyor, zerolang.ai adresinde yaşıyor ve github.com/vercel-labs/zero üzerinde açık kaynak olarak yer alıyor. Kaynak dosyaları .0 ile bitiyor.
Bu küçük örnekteki beş şey — pub, World, raises, check ve açıkça yazılmış world.out.write — Zero'nun nasıl düşündüğüne dair size çok şey söylüyor. Hepsini aşağıda tek tek açacağız.
"Her Şey Açıkça Belirtilir"
Zero dokümanlarındaki gayri resmi slogan şu: her şey açıkça belirtilir. Dil, diğer sistem dillerini insanlar için kolay ama kod üreticileri için tehlikeli kılan gizli mekanizmaları bilinçli olarak reddediyor:
- Zorunlu bir garbage collector yok.
- Gizli bir allocator yok.
- Implicit bir async runtime yok.
- Sihirli global'ler yok — ambient
stdoutyok,process.envyok, implicit filesystem yok.
Bir fonksiyonun dış dünyaya dokunan her eylemi, imzasında görünmek zorunda. Bir insan için bu fazladan yazı; bir fonksiyonun ne yaptığını çözmeye çalışan bir ajan içinse bir hediye.
Global Değil, Capability
Zero'nun I/O'yu ele alış biçimi bu felsefenin en net örneği. Global bir print fonksiyonu yok. Çıktı, runtime'ın main'e verdiği bir World değeri üzerinden yapılıyor:
pub fun main(world: World) -> Void raises {
check world.out.write("hello\n")
}
Çağrı yığınınızın derinliklerindeki bir fonksiyon bir log satırı yazmak isterse, kendisine açıkça bir World (ya da daha dar bir capability) verilmiş olmalı. Bir fonksiyonun imzasını okuyup — gövdesini okumadan — onun network'e, filesystem'e ya da stdout'a dokunup dokunmayacağını anlayabilirsiniz. Bu, bir static analyzer'ın (veya kod review yapan bir ajanın) güvenebileceği türden bir özellik.
World capability konuyu daha derinden ele alıyor.
raises ve check ile Açık Başarısızlık
Başarısız olabilen fonksiyonlar bunu açıkça beyan eder. Bu tip fonksiyonları çağıranlar da bu durumu kabul eder. Sessiz throw yok:
validate üzerindeki raises { InvalidInput } şu anlama gelir: "bu fonksiyon InvalidInput ile başarısız olabilir". Çağrı yerindeki check ise "başarısız olursa hatayı yukarı yansıt" demek. Bir hatayı yanlışlıkla yere düşüremezsiniz — ya fonksiyonun imzasında görünür ya da compiler size dur der. Tüm hikaye için Raises ve Check sayfasına bakın.
Ajanlarla Konuşan Bir Compiler
Zero'nun en ayırt edici parçası bir söz dizimi özelliği değil — compiler'ın çıktısı. Bozuk bir programa zero check --json çalıştırdığınızda şuna benzer bir şey geri gelir:
{
"ok": false,
"diagnostics": [
{
"code": "NAM003",
"message": "unknown identifier",
"line": 3,
"repair": { "id": "declare-missing-symbol" }
}
]
}
Bunu normal bir compiler hatasından üç şey ayırıyor:
- Kararlı hata kodları.
NAM003bugün "unknown identifier" demek, bir sonraki compiler sürümünde de tam olarak aynı anlama gelecek. Ajanlar İngilizce parse etmeden kod üzerinden eşleştirme yapabilir. - Yapılandırılmış onarım metadata'sı.
repairalanı, compiler'ın hatayı çözebileceğini düşündüğü fix türünü adlandırır. Bir ajanzero fix --plan --jsonile planı alıp uygulayabilir. - Düz metin parse etmeye gerek yok. Asıl mesele şu: bir ajan, ne yapacağına karar vermek için insan dostu bir mesajı yorumlamak zorunda kalmamalı.
JSON Diagnostics formatı detaylıca ele alıyor.
Bilinçli Olarak Küçük Bir Yüzey
Zero'nun grameri küçük ve düzenli — Scala ya da modern C++ gibi her özelliği içine atan bir dilden çok, erken dönem C'ye daha yakın bir ruhta. Mantığı pratik: bir ajan, bir oturum içinde tüm dili öğrenebilmeli ve uç durumlarda yanılmamalı.
Bu nedenle şunlarla karşılaşacaksınız:
- Fonksiyon tanımlamanın tek bir yolu (
funya dapub fun). - Yerel bir değer bağlamanın tek bir yolu (
let). - Product type modellemenin tek bir yolu (
shape), sum type'lar için tek bir yol (choice), sade enumeration'lar için tek bir yol (enum). - Tek bir pattern matching yapısı (
match). - Erken dilde tek bir döngü yapısı (
while).
Karşılaşmayacaklarınız — en azından bu aşamada — operator overloading, implicit conversion, makro, decorator ya da aynı fikri ifade etmenin üç ayrı yolu olacak. Bu bir özveri değil; bilinçli bir tercih: yüzeyi yeterince küçük tut ki ajan nadiren yanlış varyantı seçsin.
Zero Nedir Değildir
Beklentileri hizalamak için:
- Bir scripting dili değil. Zero native binary'lere derlenir. Programlar küçüktür (dokümanlar 10KB altı executable'lardan bahsediyor) ve yanlarında bir runtime taşımazlar.
- Rust değil, Go değil, Zig değil. Söz diziminin ortak ataları var ama öncelikleri farklı — Rust gelişmiş bir tip sistemiyle memory safety için optimize ederken, Zero bilinçli olarak küçük bir sistemle ajan öğrenilebilirliği için optimize ediyor.
- Kararlı değil. Zero pre-1.0. Ekip, ajan odaklı hedefler ilerlerse breaking change'lerin geleceğini açıkça söylüyor. Şu an ciddi bir şey için ona bel bağlamayın.
- Bir Vercel deployment platform özelliği değil. Vercel Labs'tan gelmesine rağmen Zero, Next.js veya Vercel hosting'e bağlı değil. Bağımsız bir sistem dili.
Bugün Zero'yu Neden Denersiniz
Şunlarla ilgileniyorsanız bugün Zero'yu denemek mantıklı:
- Tasarım kısıtları insanlar yerine ajanlardan geldiğinde bir dilin nasıl değiştiğini görmek.
- Bir araştırma dili benimsemeden capability tabanlı I/O ile deneyimlemek.
- "Yapılandırılmış compiler çıktısı"nın sonradan eklenmiş bir özellik değil, birinci sınıf bir özellik olarak nasıl göründüğünü izlemek.
- Aktif olarak gelişen bir Vercel Labs projesine geri bildirim vermek.
Gerçek iş için kararlı bir dile ihtiyacınız varsa, olgun bir kütüphane ekosistemi istiyorsanız ya da Rust veya Go düzeyinde cross-platform tooling arıyorsanız (şimdilik) atlayın.
Sırada: Zero'yu Kurmak
Bir sonraki yazı Zero toolchain'inin kurulumunu ve ilk programınızı derlemeye kadar olan adımları anlatıyor. Baştan sona yaklaşık bir dakika.
Sıkça Sorulan Sorular
Zero programlama dili nedir?
Zero, Vercel Labs tarafından geliştirilen deneysel bir sistem programlama dilidir. AI ajanlarının da insanlarla birlikte birinci sınıf kullanıcı olması için tasarlanmıştır. Küçük ve düzenli bir söz dizimi, World capability üzerinden explicit effect'ler ve yapılandırılmış JSON diagnostic'ler ile makine tarafından okunabilir onarım planları üreten bir compiler'a sahiptir.
Zero'yu kim geliştiriyor, resmi bir Vercel ürünü mü?
Zero, Vercel'ın araştırma kolu olan Vercel Labs'tan geliyor. github.com/vercel-labs/zero adresinde barınan açık bir deneydir; kararlı bir Vercel ürünü değildir. README'sinde dilin pre-1.0 olduğu açıkça belirtiliyor ve production ortamda ya da hassas veriyle kullanılmaması uyarısı yapılıyor.
Zero bir 'ajan dili' midir?
Evet. Zero'nun bütün amacı, sadece insanların değil AI ajanlarının da kodu güvenilir biçimde okuyabildiği, üretebildiği, debug ve onarabildiği bir dil tasarlamak. Bu felsefe, küçük ve düzenli grameri'nden compiler'ın JSON çıktısına ve NAM003 gibi kararlı hata kodlarına kadar her şeyi şekillendiriyor.
Bir Zero kaynak dosyası nasıl görünür?
Kaynak dosyaları .0 uzantısını kullanır. Minimal bir program şöyle görünür: pub fun main(world: World) -> Void raises { check world.out.write("hello\n") }. World parametresi I/O için kullanılan capability nesnesidir; raises ve check ise başarısız olabilecek işlemleri açıkça belirtir.
Zero production için hazır mı?
Hayır. Zero pre-1.0'dır ve açıkça deneysel olarak nitelendiriliyor. Compiler, standart kütüphane ve söz dizimi hâlâ değişiyor. Ekip dili yalnızca izole ortamlarda çalıştırmayı öneriyor — öğrenmek, prototip yapmak ve feedback vermek için kullanın, müşteriye yönelik yazılım göndermek için değil.