7 puan yazan GN⁺ 2025-08-22 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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.

Henüz yorum yok.