Ulaşım
- Adres:Batıkent Mh. 8910 Sk. 6. Etap 1H No: 18 Yeni Toki Eyyübiye / Şanlıurfa (Yeni Alım Satım Karşısı)
- Telefon:0 (545) 528 88 93
- eMail: info@alestaweb.com
C ve C++ yerine ne kullanılır? Rust çok mı karmaşık geldi? O zaman Zig programlama dili tam size göre. Alesta Web olarak Zig 0.14'ü inceledik: sıfır gizli kontrol akışı, sıfır gizli bellek tahsisi, C interoperability ve놀라울 derecede basit syntax. İşte 2026'da Zig öğrenmek için kapsamlı başlangıç rehberi.
Zig, Andrew Kelley tarafından 2016'da geliştirilen, sistem programlama (systems programming) için tasarlanmış modern bir dildir. C'nin yerini almak için değil, daha iyi bir C olmak için yazıldı. 2026 itibarıyla v0.14 ile birlikte production kullanımına oldukça yaklaşmış durumda.
1. Gizli kontrol akışı yok (No hidden control flow) 2. Gizli bellek tahsisi yok (No hidden memory allocations) 3. Önişlemci makro yok (No preprocessor macros) 4. Garbage collector yok (No garbage collector) 5. Runtime exception yok (No runtime exceptions)
Bun.js JavaScript runtime, TigerBeetle veritabanı ve bazı oyun motorları Zig ile yazılmış. Bun runtime'ın Node.js'den 3-5x hızlı olması büyük ölçüde Zig'e dayanıyor.
| Özellik / Feature | C | Rust | Zig |
|---|---|---|---|
| Öğrenme Eğrisi | Orta | Zor (borrow checker) | Orta ✅ |
| Bellek Güvenliği | Manuel (unsafe) | Compile-time güvenli | Manuel + optional safety |
| C Interop | Native ✅ | FFI gerektirir | Native ✅ |
| Derleme Süresi | Hızlı | Yavaş | Hızlı ✅ |
| Cross Compilation | Karmaşık | Orta | Çok kolay ✅ |
# Zig 0.14 indir (tarball)
wget https://ziglang.org/download/0.14.0/zig-linux-x86_64-0.14.0.tar.xz
# Aç
tar -xf zig-linux-x86_64-0.14.0.tar.xz
# PATH'e ekle (~/.bashrc veya ~/.zshrc)
echo 'export PATH=$HOME/zig-linux-x86_64-0.14.0:$PATH' >> ~/.bashrc
source ~/.bashrc
# Kontrol et
zig version
# → 0.14.0
# winget ile kur (Windows Package Manager)
winget install zig.zig
# Veya scoop ile:
scoop install zig
# Kontrol et:
zig version
# VSCode'da "Zig Language" extension kur
# Ardından ZLS otomatik indirilir
# Manuel kurulum:
wget https://github.com/zigtools/zls/releases/download/0.14.0/zls-linux-x86_64.tar.gz
tar -xf zls-linux-x86_64.tar.gz
sudo mv zls /usr/local/bin/
# Yeni Zig projesi oluştur
mkdir merhaba-dunya && cd merhaba-dunya
zig init
# Oluşturulan dosyalar:
# ├── build.zig ← Build scripti
# ├── build.zig.zon ← Paket tanımı (package manifest)
# └── src/
# └── main.zig ← Ana kaynak dosya
const std = @import("std");
pub fn main() void {
// stdout'a yaz
const stdout = std.io.getStdOut().writer();
stdout.print("Merhaba Dünya! Alesta Web'den selamlar.\n", .{}) catch {};
}
// Derleme ve çalıştırma:
// zig build run
# Geliştirme modunda çalıştır
zig build run
# Release binary üret (optimize edilmiş)
zig build -Doptimize=ReleaseFast
# Farklı platform için cross-compile
zig build -Dtarget=x86_64-windows
zig build -Dtarget=aarch64-linux
zig build -Dtarget=x86_64-macos
Zig'in en önemli özelliği explicit allocator sistemidir. Her fonksiyon hangi allocator kullandığını açıkça belirtir — gizli bellek tahsisi yoktur.
const std = @import("std");
pub fn main() !void {
// General Purpose Allocator (geliştirme için - memory leak tespit eder)
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Dinamik bellek tahsis et
const dizi = try allocator.alloc(u8, 100);
defer allocator.free(dizi); // Temizlemeyi unutma!
// ArrayList kullanımı
var liste = std.ArrayList(i32).init(allocator);
defer liste.deinit();
try liste.append(42);
try liste.append(100);
std.debug.print("Liste: {any}\n", .{liste.items});
}
GeneralPurposeAllocator - Geliştirme (leak tespiti)ArenaAllocator - Toplu serbest bırakma (bulk free)FixedBufferAllocator - Stack üzerinde (gömülü sistemler)c_allocator - C malloc/free wrapperZig'de exception yoktur. Hatalar değer olarak döndürülür ve compile time'da yakalanmak zorundadır.
const std = @import("std");
// Hata seti tanımla (define error set)
const DosyaHatasi = error{
DosyaBulunamadi,
OkumaHatasi,
YazmaHatasi,
};
// !void = hata döndürebilir veya void
fn dosyaOku(yol: []const u8) DosyaHatasi![]u8 {
_ = yol;
return DosyaHatasi.DosyaBulunamadi;
}
pub fn main() void {
// try: hata varsa üst fonksiyona ilet
const icerik = dosyaOku("/tmp/test.txt") catch |err| {
std.debug.print("Hata: {}\n", .{err});
return;
};
_ = icerik;
}
Zig'in süpergücü: mevcut C kütüphanelerini header dosyası olmadan kullanabilirsiniz.
const c = @cImport({
@cInclude("stdio.h");
@cInclude("string.h");
});
pub fn main() void {
// C'nin printf'ini Zig'den çağır
_ = c.printf("Merhaba C'den! - Alesta Web\n");
// strlen kullanımı
const uzunluk = c.strlen("Zig harika!");
_ = c.printf("Uzunluk: %zu\n", uzunluk);
}
# Zig ile C kodu derle (clang'den daha iyi cross-compile)
zig cc -o program main.c
# Windows için cross-compile (Linux'tan):
zig cc -target x86_64-windows -o program.exe main.c
✅ Build System iyileştirmeleri (daha hızlı incremental compile) ✅ @trap() builtin eklendi (undefined behavior için) ✅ std.Random API yeniden tasarlandı ✅ Async/await sistemi yeniden yazılıyor (önizleme) ✅ WASI (WebAssembly System Interface) desteği iyileştirildi ✅ Hata mesajları çok daha okunabilir hale geldi ✅ Compiler bootstrap süresi ~%15 iyileşti
Zig henüz 1.0 sürümüne ulaşmadı. Her minor sürümde breaking changes olabilir. Production kritik projeler için dikkatli değerlendirin. Bun.js gibi projeler kendi Zig fork'larını kullanıyor.
Zig 0.14, sistem programlama dünyasında C ve C++'a ciddi bir alternatif sunuyor. Alesta Web olarak özellikle C interoperability ve cross-compilation yeteneklerinin etkileyici olduğunu söyleyebiliriz. Rust'ın karmaşıklığından çekinen ama C'nin güvensizliğinden kaçmak isteyenler için Zig çok mantıklı bir seçim.
Hızlı Özet / Quick Summary:
Faydalı Linkler / Useful Links:
© 2026 AlestaWeb - Tüm hakları saklıdır.