- Zig, Rust'a benzer süslü parantez tabanlı bir sözdizimine dayanır, ancak daha basit dil semantiği ve rafine sözdizimi tercihleriyle bunu geliştirir
- Tamsayı sabitlerinde tüm türler
comptime_int olarak başlar ve atama sırasında açıkça dönüştürülür; dize sabitleri ise \\ tabanlı, kısa ve öz bir ham dize gösterimi kullanır
.x = 1 biçimindeki kayıt sabitleri, alan yazımlarını kolay aranabilir hale getirir ve tüm türler önek gösterimiyle tutarlı biçimde ifade edilir
and ve or, kontrol akışı anahtar sözcükleri olarak kullanılır; if ve loop yapılarında süslü parantezler isteğe bağlı olarak atlanabilir ve biçimlendirici güvenliği garanti eder
- Ad alanları olmadan her şey ifade olarak ele alınır; böylece tür, değer ve desen sözdizimi birleşir ve generics, kayıt sabitleri, yerleşik işlevler (
@import, @as vb.) kısa ve öz şekilde kullanılabilir
Genel Bakış
- Zig, Rust'a benzer bir görünüme sahip olsa da daha basit bir dil yapısını benimser
- Sözdizimi tasarımında grep dostu olma, sözdizimsel tutarlılık ve gereksiz görsel gürültüyü azaltma üzerine odaklanır
Tamsayı Sabitleri
const an_integer = 92;
assert(@TypeOf(an_integer) == comptime_int);
const x: i32 = 92;
const y = @as(i32, 92);
- Tüm tamsayı sabitleri
comptime_int türündedir
- Bir değişkene atanırken tür açıkça belirtilir ya da
@as kullanılarak dönüştürülür
var x = 92; biçimi çalışmaz; açık tür gerekir
Dize Sabitleri
const raw =
\\Roses are red
\\ Violets are blue,
\\Sugar is sweet
\\ And so are you.
\\
;
- Her satır ayrı bir token olduğu için girinti sorunu yoktur
\\ ifadesinin kendisini escape etmeye gerek yoktur
Kayıt Sabitleri
const p: Point = .{
.x = 1,
.y = 2,
};
.x = 1 biçimi, okuma ve yazmayı ayırt etmede avantaj sağlar
.{} gösterimi, bloklardan ayrışırken sonuç türüne otomatik dönüştürülür
Tür Gösterimi
u32 // tamsayı
[3]u32 // uzunluğu 3 olan dizi
?[3]u32 // null olabilen dizi
*const ?[3]u32 // sabit işaretçi
- Tüm türler önek (prefix) gösterimi kullanır
- Dereference işlemi sonek gösterimindedir (
ptr.*)
Tanımlayıcılar
const @"a name with space" = 42;
- Anahtar sözcük çakışmalarını önlemek veya özel adlar tanımlamak mümkündür
Fonksiyon Bildirimi
pub fn main() void {}
fn add(x: i32, y: i32) i32 {
return x + y;
}
fn anahtar sözcüğü ile fonksiyon adı bitişik olduğundan arama yapmak kolaydır
- Dönüş türü gösteriminde
-> kullanılmaz
Değişken Bildirimi
const mid = lo + @divFloor(hi - lo, 2);
var count: u32 = 0;
const ve var kullanılır
- Tür gösterimi
ad: tür sırasındadır
Kontrol Akışı: and/or
while (count > 0 and ascii.isWhitespace(buffer[count - 1])) {
count -= 1;
}
and, or kontrol akışı anahtar sözcükleridir
- Bit işlemlerinde
&, | kullanılır
if İfadesi
.direction = if (prng.boolean()) .ascending else .descending;
- Parantez zorunlu, süslü parantez isteğe bağlıdır
zig fmt güvenli biçimlendirmeyi garanti eder
Döngüler
for (0..10) |i| {
print("{d}\n", .{i});
} else @panic("loop safety counter exceeded");
- Hem
for hem while, else bloğunu destekler
- Yineleyici ve öğe adları sezgisel biçimde yerleştirilir
Ad Alanları ve İsim Çözümleme
const std = @import("std");
const ArrayList = std.ArrayList;
- Değişken shadowing'e izin verilmez
- Ad alanları ve glob import yoktur
Her Şey Bir İfadedir
const E = enum { a, b };
const e: if (true) E else void = .a;
- Tür, değer ve desen sözdizimi birleşir
- Tür konumunda koşullu ifade kullanılabilir
Generics
fn ArrayListType(comptime T: type) type {
return struct {
fn init() void {}
};
}
var xs: ArrayListType(u32) = .init();
- Generics, fonksiyon çağrısı sözdizimiyle (
Type(T)) ifade edilir
- Tür argümanları her zaman açıktır
Yerleşik İşlevler
const foo = @import("./foo.zig");
const num = @as(i32, 92);
- Derleyicinin sunduğu işlevler
@ önekiyle çağrılır
@import, dosya yolunu açıkça gösterir
- Argüman mutlaka bir dize sabiti olmalıdır
Sonuç
- Zig sözdizimi, küçük tercihlerin toplamının okuması kolay bir dil ortaya çıkardığı bir örnek
- Özellik sayısı azaldıkça gerekli sözdizimi de azalır ve sözdizimleri arasındaki çakışma olasılığı da düşer
- Mevcut dillerin iyi fikirlerini ödünç alırken, gerektiğinde cesurca yeni sözdizimleri de getirir
Henüz yorum yok.