Zig
Kısaca
Zig, elle bellek yönetimi sunan ve gizli kontrol akışı içermeyen, C'nin daha basit ve güvenli bir halefi olmayı hedefleyen düşük seviyeli bir sistem dilidir.
Zig nedir?
Zig, Andrew Kelley tarafından geliştirilen ve ilk kez 2016'da duyurulan, genel amaçlı bir sistem programlama dilidir. İşletim sistemi bileşenleri, gömülü yazılımlar, oyun motorları ve performans açısından kritik araçlar gibi C ile aynı türden işleri hedefler; ancak modern güvenlik özellikleri ve daha net kurallarla. Zig hâlâ kararlı bir 1.0 sürümüne doğru çalışmaktadır, bu yüzden sürümler arasında kırıcı değişiklikler yaygındır.
Zig'in tasarımı birkaç ilkeyi izler: gizli kontrol akışı yok, gizli bellek ayırma yok, önişlemci ya da makro yok. Belleğe ihtiyaç duyan fonksiyonlar bir ayırıcıyı (allocator) açık bir argüman olarak alır; böylece belleğin nereden geldiğini her zaman görebilir ve nasıl yönetileceğini seçebilirsiniz. Hatalar, hata birleşim tiplerinde (error union) döndürülen ve try ile catch ile ele alınan sıradan değerlerdir; comptime ise sıradan Zig kodunun derleme zamanında çalışarak tipler üretmesine ve fonksiyonları özelleştirmesine izin verir, böylece C ve C++'ın makrolarının ve şablonlarının yerini alır.
Zig ayrıca bir C ve C++ araç zinciri olarak da çalışır: C başlık dosyalarını doğrudan içe aktarabilir, C fonksiyonlarını ek bağlayıcılar olmadan çağırabilir ve C kodunu tek bir makineden birçok hedef platform için derleyebilir; bu da çapraz derlemeyi kolaylaştırır. Hata ayıklama ve güvenli sürüm derlemeleri, tamsayı taşması ve sınır dışı erişim gibi sorunlar için çalışma zamanı denetimleri ekler; en hızlı sürüm modu ise bunları kaldırır. Zig kullanmak, her göstergeyi gösteren bir kontrol paneline sahip manuel vitesli bir araba sürmeye biraz benzer: kontrol hâlâ tamamen sizdedir, ama sizden çok daha az şey gizlenir.
Zig sıklıkla Rust ile kıyaslanır, çünkü ikisi de C ve C++'a modern alternatiflerdir. Rust, sahiplik kuralları ve ödünç denetleyicisi sayesinde bellek güvenliğini derleme zamanında garanti eder; bu da bütün bir hata sınıfını önler ama karmaşıklık ekler. Zig ise elle bellek yönetimini korur ve bunun yerine açık ayırıcılara, çalışma zamanı güvenlik denetimlerine ve teste dayanır. Zig ayrıca ruh olarak C'ye daha yakındır: tamamını öğrenebileceğiniz küçük bir dildir ve mevcut C koduyla sorunsuz birlikte çalışır.
Önemli noktalar
- Zig, C'ye modern ve daha basit bir alternatif olarak konumlanan bir sistem dilidir.
- Bellek, fonksiyonlara aktarılan açık ayırıcılarla elle yönetilir.
comptime, makrolara güvenmek yerine Zig kodunu derleme zamanında çalıştırır.- C kodunu derleyebilir ve çapraz derleyebilir, C başlıklarını doğrudan içe aktarabilir.
- Rust'ın aksine ödünç denetleyicisi yoktur; güvenlik, çalışma zamanı denetimlerinden ve açık tasarımdan gelir.
Örnek
const std = @import("std");
pub fn main() !void {
// Memory comes from an allocator you choose and pass explicitly
const allocator = std.heap.page_allocator;
const numbers = try allocator.alloc(u32, 5);
defer allocator.free(numbers); // freed when main returns
for (numbers, 0..) |*n, i| {
n.* = @intCast(i * i);
}
std.debug.print("Last square: {d}\n", .{numbers[4]});
}Sık sorulan sorular
Zig üretime hazır mı?
Bazı şirketler ve açık kaynak projeleri Zig ile yazılmış yazılımları şimdiden yayımlıyor, ancak dil 1.0 sürümüne ulaşmadı ve sürümler arasında hâlâ değişiyor. Onu kullanan ekipler, derleyiciyi yükselttiklerinde kodlarını güncellemeyi beklemelidir.
Zig ile C arasındaki fark nedir?
Zig, C'nin elle bellek yönetimini ve düşük seviyeli kontrolünü korur, ancak önişlemciyi kaldırır; hata birleşimleri, isteğe bağlı tipler, derleme zamanında yürütme ve güvenlik denetimleri ekler ve ayırmayı açık hale getirir. C kütüphanelerini doğrudan da kullanabilir, bu yüzden ikisi aynı projede yaşayabilir.
Zig mi Rust mı öğrenmeliyim?
Rust, derleme zamanı bellek güvenliği garantileri ve geniş, kararlı bir ekosistem sunar; bu da büyük ekiplere ve güvenliğe duyarlı koda uygundur. Zig daha küçük ve C'ye daha yakındır; bu da basit, açık düşük seviyeli kontrol ve kolay C birlikte çalışabilirliği isteyen geliştiricilere uygundur.
İlgili sayfalar
- CProgramlama Dilleri, s. 3C, belleğe doğrudan erişim sağlayan, derlenen ve düşük seviyeli bir programlama dilidir; işletim sistemlerinde, sürücülerde ve gömülü yazılımlarda kullanılır.
- RustProgramlama Dilleri, s. 29Rust, sahiplik kurallarını derleme zamanında denetleyerek çöp toplayıcı olmadan bellek güvenliği sağlayan, derlenen ve statik tipli bir sistem dilidir.
- C++Programlama Dilleri, s. 5C++, C'yi sınıflar ve şablonlarla genişleten; bellek ve performans üzerinde düşük seviyeli kontrolü koruyan, derlenen ve statik tipli bir dildir.
- İşaretçiProgramlamanın Temelleri, s. 29İşaretçi, başka bir değerin kendisi yerine bellek adresini saklayan bir değişkendir; kodun o veriyi dolaylı yoldan okumasına ya da değiştirmesine imkân tanır.
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- Memory Leakİşletim Sistemleri, s. 20Memory leak, bir programın artık ihtiyaç duymadığı belleği tutmayı sürdürdüğü hatadır; bellek kullanımı zamanla artar, sistem yavaşlayabilir ya da çökebilir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin