Zero'nun Sorduğu Soru
Zero'nun arkasındaki varsayım basit: bir AI ajanı — yalnızca bir insan değil — kodu okurken, yazarken ve onarırken, dilin kendisi nasıl görünmek ister?
Mevcut diller, ajanlar kod yazabilmeden çok önce tasarlandı. Öncelikleri — kısa söz dizimi, ifade gücü yüksek deyimler, kütüphane zekası — editörlere yazan insanlar için anlamlı. Belirsizliği ve implicit conversion'ları tolere ederler çünkü insanlar boşlukları doldurmakta iyidir. Ajanlar değil. Olasılık dağılımlarından kesin metin üretirler ve dilin her bulanık kenarı için aşağı doğru bir yerde yanlış bir token ile ödeme yaparlar.
Zero kısıt tersine çevrilmiş olarak baştan başlar: önce ajanlar için tasarla, insanların yine de kodu okuyacağını kabul et ve ortaya ne çıkacağına bak.
Prensip 1: Küçük, Düzenli Bir Yüzey
Çoğu programlama dili zamanla büyür. Her yeni release küçük bir kolaylık ekler — yeni bir operatör, yeni bir söz dizimi formu, dilin zaten ele aldığı bir şeyi ifade etmenin yeni bir yolu. Her ekleme insan ergonomisinde karşılığını öder. Her ekleme bir ajan için maliyetlidir: öğrenmesi gereken başka bir varyant, yanılması mümkün başka bir yol.
Zero, yüzeyi bilinçli olarak küçük tutar:
- Bir bağlama formu (
let). - Bir fonksiyon formu (
fun, opsiyonel olarakpub). - Bugün bir döngü (
while). - Product type'ları modellemenin bir yolu (
shape). - Payload'lı sum type'ları modellemenin bir yolu (
choice). - Etiketli toplam modellemenin bir yolu (
enum). - Bir pattern matching yapısı (
match).
Operator overloading yok, decorator yok, makro yok, implicit conversion yok, truthy coercion yok, ternary yok. Her yokluk bir özelliktir: bir ajanın yanlış varyantı seçebileceği bir yeri kaldırır.
Maliyet apaçık olanıdır — daha az kolaylık özelliği. Fayda ise, bir oturum içinde Zero öğrenen bir ajanın yedi yakın-eşdeğer arasında tartmak zorunda kalmadan doğru söz dizimine yakınsayabilmesidir.
Prensip 2: Explicit Effect'ler
Çoğu dil, herhangi bir yerde herhangi bir fonksiyonun I/O yapmasına izin verir. JavaScript'te console.log, C'de printf, Python'da print. Fonksiyonun imzası bir dosyaya yazıp yazmayacağı veya network'e gidip gitmeyeceği hakkında hiçbir ipucu vermez. Bilmenin tek yolu gövdeyi özyinelemeli olarak okumaktır.
Zero zıt pozisyonu alır: bir fonksiyonun her effect'i imzasında görünür.
- I/O,
Worldcapability tarafından kapısı tutulur.Worldalmayan bir fonksiyon I/O yapamaz. Type system bunu zorlar. - Başarısızlık,
raisesvechecktarafından kapısı tutulur. Başarısız olabilen bir fonksiyon bunu imzasında söyler. Her çağıran bunucheckveya başka bir explicit yapıyla kabul eder.
Bir fonksiyonun yalnızca imzasından, bir ajanın (ya da bir static analyzer'ın ya da bir insan reviewer'ın) derin önem verdiği iki soruyu cevaplayabilirsiniz:
- "Bu dış dünyaya dokunabilir mi?" — yalnızca
Worldgörünüyorsa evet. - "Bu başarısız olabilir mi?" — yalnızca
raisesgörünüyorsa evet.
Bu özellik ana akım dillerde mevcut değildir ve sahip olmak için küçük bir özellik de değildir.
Maliyet, parametre taşımaktır. World değeri I/O ihtiyacı olan her yere geçirilir; raises clause'u error'ların aktığı her yerde tekrarlanır. Zero bunu özelliğin bedeli olarak kabul eder.
Prensip 3: Deterministik Tooling
Üçüncü prensip, ajanları en doğrudan hedefleyen olanıdır: compiler'ın ürettiği her çıktı yapılandırılmış veridir.
JSON diagnostics başlık örneğidir:
{
"code": "NAM003",
"message": "unknown identifier",
"line": 3,
"repair": { "id": "declare-missing-symbol" }
}
Bunu normal bir compiler hatasından üç özellik ayırır:
- Kararlı kodlar.
NAM003insan dostu mesajın nasıl ifade edildiğine bakılmaksızın bugün ve yarın aynı şeyi ifade eder. - Yapılandırılmış repair plan'ları. Compiler bir diagnostic'i nasıl düzelteceğini bildiğini düşündüğünde, bir planı veri olarak üretir — bir İngilizce öneri değil, bir edit listesi.
- Birden çok yapılandırılmış kanal. Diagnostic'ler, dependency graph'lar, size rapor ve açıklamalar hepsi
--jsonmodlarının arkasında yaşar.
Ana fikir şu: bir aracın — ajan veya başka — compiler çıktısı üzerinde hareket etmek için asla İngilizce parse etmesi gerekmez. Kararlı bir kodu aramak kesindir; düz metin parse etmek bulanıktır. Zero, ilkini sözleşme olarak, ikincisini ise insanlar için bir kolaylık olarak ele alır.
Prensip 4: Dilin İçinde Yaşayan Bir Kütüphane
Ajanlar, mevcut desenleri takip eden kod yazmakta iyidir. Bir seçenek denizinden doğru harici bir bağımlılığı seçmek, onu doğru entegre etmek ve API'si kaydığında izlemek konusunda daha kötüler. Her harici bağımlılık sürtünmedir.
Zero'nun tasarımı capability'leri standart kütüphaneye iter — açıkça belgelenmiş, tutarlı ve dil kararlı hale geldikçe kararlı. Amaç, bir Zero programının rutin iş için nadiren standart dağıtımın dışına uzanması. Bu, bir ajanın muhakeme yapması gereken yüzeyi sınırlandırır.
Bu, bugün bitmiş bir durumdan çok bir hedef. Pre-1.0 standart kütüphanesi gerçek ama hâlâ büyüyor. Prensip, varış yeri değil yön.
Zero Neleri Takas Ediyor
Her tasarım tercihinin bir maliyeti vardır. Zero'nun yaptığı dürüst takaslar:
- Özlülük yerine verbosity. Pure fonksiyonlar
World'e ihtiyaç duymaz. I/O yapabilen fonksiyonlar duyar. Hatalar imzalarda görünür. Sonuç, JavaScript veya Python eşdeğerinden daha fazla annotation. - Sihir yerine explicit. Reflective metaprogramlama yok, davranışı sessizce saran decorator yok, implicit global yok. Dinamik dillerde "sadece çalışıyor" gibi görünen şeylerin elle bağlanması gerekir.
- Dinamik yerine statik. Parametreler, dönüş değerleri ve shape alanlarında tipler gereklidir. Compiler çok iş yapar; karşılığında her imza, bir yazarın (ya da üreticinin) yazması gereken bir şeydir.
- Değişim oranı yerine kararlılık. Dil pre-1.0 ve hızla değişiyor, ama tasarım niyeti yüzeyi yerleştikten sonra sabitlemek. Maliyet, sonradan akıllı bir yeni kolaylık özelliği eklemenin zorlaşması, çünkü eklemeler için çıta "bu ajanı maliyetinden daha çok mu destekliyor?"
Takasların değerli olup olmadığı, neyi optimize ettiğinize bağlıdır. Tek seferlik bir script yazan bir insansanız, sürtünme gerçek ve ajan faydaları soyut. Günde binlerce küçük program üreten bir ajanı işletiyorsanız, sürtünme katbekat geri öder.
Zero'nun Olmayı Denemediği Şey
Açıkça yapılmaya değer birkaç olumsuz iddia:
- "Tüm programlamanın geleceği" değil. Zero bir hipotezdir, bir manifesto değil. Hipotez şu: ajan odaklı kısıtlar faydalı bir dil üretir. Ana akım dillerin bu kısıtları benimsemesi gerekip gerekmediği ayrı, daha uzun bir konuşma.
- 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.
- Production'da Rust, Go veya Zig'in yerine geçen bir şey değil. Pre-1.0. Deneysel. Öğrenmek ve feedback vermek için kullanın; henüz onunla customer software göndermeyin.
- Bitmiş değil. Standart kütüphanenin parçaları, mutability söz dizimi, error-handling formları ve generic'ler üzerindeki constraint'ler 1.0'dan önce hareket edebilir.
Kullanmasanız Bile İlginç Olan Ne
Bir satır Zero yazmasanız bile, deney öğreticidir:
- Küçük bir sistem dilinde gerçek, çalışan, capability tabanlı bir effect sisteminin en net örneği. Zihinsel model — izni geç, imzadaki effect'i gör — taşınabilir.
- Diagnostic hikayesi, son on yıldır her compiler'ın yapması gereken şey. Yapılandırılmış çıktı her zaman düz metni yener ve Zero'nun kararlı kodlara olan bağlılığı, dil değişiklikleri olmadan diğer araçların benimseyebileceği bir şey.
- "Her şeyi yapmanın tek yolu, bilinçli olarak küçük yüzey" prensibi, dil tasarımının genelde uygulandığı şekle ters. O prensibin nerede yardımcı olduğunu ve nerede kıstırdığını izlemek, yarın hangi dili yazıyor olursanız olun faydalıdır.
Sırada Ne Okumalı
Bu dokümanların geri kalanını bitirdiyseniz, en faydalı sonraki okumalar dışarıda:
github.com/vercel-labs/zeroadresindeki Zero repository'si — örnekler, kaynak ve maintainer'ların kendi niyet beyanı içinAGENTS.md.zerolang.aiadresindeki resmi site — başlangıç talimatları ve kanonik giriş.
Her ikisi de gelişmekte. Orada bulacaklarınız, herhangi bir üçüncü taraf tutorial'dan daha güncel olacak. Bu dokümandaki prensipler yavaş hareket eden kısım; etraflarındaki söz dizimi dil yerleşirken hareket edecek.
Sıkça Sorulan Sorular
'Agent-first programlama dili' ne demek?
AI ajanlarının — yalnızca insanların değil — baştan itibaren dilin birincil kullanıcıları olarak ele alınması demek. İhtiyaçları (söz dizimini mekanik olarak parse etmek, geçerli programlar üretmek, hata çıktısını veri olarak okumak, düzeltmeleri deterministik olarak uygulamak), insan okunabilirliği ve ergonomi gibi olağan kaygılarla birlikte tasarım tercihlerini yönlendiriyor.
Mevcut bir dil ajanlar için neden işe yaramaz?
Mevcut diller insanlar için tasarlandı. Gramerleri insanların tolere ettiği ama kod üreticilerini tökezleten kısayollar, implicit conversion'lar ve belirsiz yapılar içerir. Compiler'ları düz metin üretir, veri değil. Effect sistemleri implicit'tir. Bunların hiçbiri ölümcül değil — ajanlar bunların etrafından dolaşabilir — ama baştan ajanlar için tasarlanmış bir dil, sürtünmeyi üzerini örtmek yerine kaldırır.
Zero'nun tasarımının temel prensipleri nelerdir?
Küçük ve düzenli bir gramer (her şeyi yapmanın tek yolu), World capability üzerinden explicit effect'ler (ambient I/O yok), raises/check üzerinden explicit başarısızlık (gizli kontrol akışı yok) ve deterministik tooling (kararlı kodlar ve repair plan'larıyla yapılandırılmış veri olarak compiler çıktısı). Prensipler birleşir — her biri diğerlerini bir ajan için daha kullanışlı hale getirir.
Zero ajan odaklı olmak için neleri feda ediyor?
Özlülük ve ambient kolaylık. Implicit truthiness yok, global print yok, çağrı yığını arasında sessizce unwind eden try/catch yok. Fonksiyonlar daha çok parametreli, imzalar daha çok annotation taşıyor. Karşılığı, bir fonksiyonun ne yaptığının — yapamayabileceği şey dahil — yalnızca imzasından okunabilir olması.
Zero, insanların yazdığı programlama dillerinin yerini alacak mı?
Hayır ve amaç da bu değil. Zero, ajan odaklı bir tasarımın nasıl göründüğüne dair bir deney; diğer dillerin tercihlerinin hepsini benimsemesi gerektiği iddiası değil. İlginç sonuç, deneyin öğrettiği şey: hangi kısıtlar ajanlara en çok yardımcı olur, hangi takasları insanlar tolere eder ve hangi fikirler zamanla ana akım dillere geri göç edebilir.