Dosyayı Yazın
Editörünüzü açın ve aşağıdaki beş satırı uygun bir yere hello.0 olarak kaydedin — ya da aşağıdaki bloğun üzerindeki Run'a tıklayın:
İşte bu — eksiksiz bir Zero programı. Yerelde çalıştırmak için:
zero run hello.0
Şunu görmelisiniz:
hello from zero
command not found aldıysanız Zero Kurulumu sayfasına dönün ve önce zero --version komutunun çalıştığından emin olun.
Her Token'ı Tek Tek Açalım
Bu küçücük program bile Zero'yu farklı kılan şeylerin çoğunu sergiliyor. Soldan sağa okuyalım.
pub
pub, bir bildirimi public olarak işaretler — yani mevcut modülünün dışında görünür yapar. Runtime'ın main'i kendi dosyasının kapsamı dışından bulabilmesi gerekir, bu yüzden main pub olmalıdır. Aynı dosya içindeki private bir yardımcı fonksiyonun buna ihtiyacı olmazdı.
fun
fun, bir fonksiyon bildirimini başlatır. Zero fun kullanır; fn (Rust), func (Go) ya da function (JavaScript) değil. Tek bir anahtar kelime, her yerde aynı şekilde kullanılıyor.
main
Geleneksel giriş noktası adı. Bir Zero executable target çalıştığında, runtime pub fun main(world: World) imzasını arar ve onu çağırır. Diğer fonksiyonları istediğiniz gibi adlandırabilirsiniz, ama main programın giriş noktası için ayrılmış geleneksel bir isimdir.
(world: World)
Tek parametrenin adı world ve tipi World. Runtime, main'i çağırmadan önce bir World değeri oluşturur ve onu içeri geçer. O değer programın capability'lerini taşır: stdout, stdin, filesystem, network ve runtime'ın ne vermeye karar verdiğine bağlı olarak diğer her şeye erişim.
Parametre ismini siz seçersiniz — (w: World) ya da (io: World) de sorunsuz derlenir. Örneklerdeki konvansiyon world; biz de buna sadık kalacağız.
-> Void
Dönüş tipi. Void, fonksiyonun anlamlı bir değer döndürmediği anlamına gelir — fonksiyon değeri için değil, side effect'i için var. Yazacağınız pek çok fonksiyon i32 ya da tanımladığınız bir shape gibi gerçek tipler döndürecek.
raises
main üzerindeki çıplak raises (belirli bir error tipi olmadan) "bu fonksiyon başarısız olabilir" anlamına gelir. main için bu, gövde içindeki herhangi bir check hatayı yukarı yansıtırsa programın nonzero status ile çıkabileceği anlamına gelir. Daha dar formları — örneğin raises { InvalidInput } — Raises ve Check sayfasında göreceğiz.
check world.out.write("hello from zero\n")
Asıl iş yapan satır bu. Üç alt parça:
world.out—Worldcapability üzerinde bir alan olarak gösterilen standart çıktı stream'i..write("hello from zero\n")— o stream'e bir string yazan metot. Hata gösterebilecek bir sonuç döndürür (yazma işlemi başarısız olabilir; stream kapanmış olabilir).check— başarısızlık olursa bunu yukarı yansıtır.checkolmadan compiler,write'ın sonucunun sessizce yutulduğundan şikayet ederdi.
Sonundaki \n literal bir yeni satır karakteridir. Onsuz çıktı yeni satıra geçmez ve shell prompt'unuz mesajınızla aynı satıra konar.
Az Önce Ne Oldu
zero run hello.0 çalıştırdığınızda:
- Compiler dosyanızı parse etti ve type-check yaptı.
- Platformunuz için küçük bir native executable üretti.
- Runtime, mevcut process için bir
Worldcapability oluşturdu. main(world)'ü çağırdı.- Kodunuz "hello from zero\n" stringini o world'ün
outstream'ine yazdı — bu da terminalinizin stdout'una bağlı. mainVoiddöndürdü, runtime temizlik yaptı ve program 0 status ile çıktı.
Ortada garbage collector yok, gizli runtime initialization yok, implicit modül bootstrap yok. Tüm program, yazdığınız fonksiyon ve onun çağırdığı standart kütüphane kodundan ibaret.
Küçük Bir Değişiklik Deneyin
Mesajı yazmadan önce bir binding ile tutmasını sağlayın:
Tekrar çalıştırın — aynı çıktı, ama artık let bağlamalarını gördünüz ve string'lerin etrafa geçirebileceğiniz birinci sınıf değerler olduğunu doğruladınız.
Başarısız Bir Varyant
check'i unutursanız ne olur?
pub fun main(world: World) -> Void raises {
world.out.write("oops\n")
}
zero check hello.0 bunu derlemeyi reddeder. write'ın sonucu başarısız olabilen bir değer; onu görmezden gelmek bir compile error. Ya check ile ele alırsınız (hatayı yukarı yansıtırsınız) ya da explicit bir şekilde işlersiniz. Bu, Rust'ın must_use sonuçlarıyla aynı fikir; sadece her başarısızlık olasılığı olan çağrı için zorunlu kılınıyor.
Sırada: Zero CLI
Burada zero run'u kullandınız. CLI'da bilmeye değer küçük bir komut seti var — check, run, build, test, fix, explain — her biri ajanların tüketmesi için tasarlanmış yapılandırılmış bir --json moduna sahip.
Sıkça Sorulan Sorular
Zero'da hello world programı nedir?
Kanonik Zero hello world beş satırdır: pub fun main(world: World) -> Void raises { check world.out.write("hello from zero\n") }. Bunu hello.0 olarak kaydedin ve zero run hello.0 ile çalıştırın.
Zero'da pub fun main ne anlama gelir?
pub fun main ne anlama gelir?pub bir bildirimi public yapar — kendi modülünün dışından görünür kılar. fun bir fonksiyon tanımlar. main ise Zero'nun bir executable target için aradığı geleneksel giriş noktasıdır. Hepsi birlikte pub fun main, program başladığında runtime'ın çağırdığı public giriş noktasını tanımlar.
main neden World parametresi alır?
World parametresi alır?Zero'da global I/O yoktur. Dış dünyaya konuşan her şey — stdout, stdin, dosyalar, network — explicit olarak verilen capability'ler üzerinden gider. Runtime main'e bir World değeri verir; fonksiyonlar I/O yapmak için ancak o değeri (veya parçalarını) kullanabilir. Bu sayede side effect'ler fonksiyon imzalarında görünür hale gelir.
Hello world'de raises ve check ne işe yarar?
raises ve check ne işe yarar?main üzerindeki raises, fonksiyonun başarısız olabileceğini belirtir. check world.out.write(...) ifadesi başarısız olabilecek bir fonksiyonu çağırır ve hata alırsa onu çağıran tarafa — burada nonzero status ile çıkacak olan runtime'a — yansıtır. check olmadan compiler, hata ele alınmadığı için çağrıyı derlemeyi reddederdi.
Zero hangi dosya uzantısını kullanır?
Zero kaynak dosyaları .0 uzantısını kullanır (rakam sıfır, O harfi değil). hello.0 dosyası bir Zero kaynak dosyasıdır. Compiler zero check hello.0 ve zero run hello.0 gibi komutlarla çağrılır.