Zig projesinin Dosya yapısı ve Dosyaların Özellikleri
Yeni bir zig projesi aşağıdaki komutla çalıştırıldığında 2 adet dosya oluşur:
zig init
Oluşan dosyalar:
.
├── build.zig
├── build.zig.zon
└── src
├── main.zig
└── root.zig
1 directory, 4 files
Şimdi bu dosyaların ne işe yaradığını inceleyelim.
build.zig
Projenizin nasıl build edileceğini belirleyen komutları içeren dosyadır.
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const exe = b.addExecutable(.{
.name = "my_project",
.root_source_file = .{ .path = "src/main.zig" },
.target = target,
.optimize = optimize,
});
b.installArtifact(exe);
}
builg.zig.zon
JSON benzeri bir notasyona sahip olan ve projenin bağımlılıkları dependencies tanımlandığı dosyadır.
ZON (Zig Object Notation) kelimesinin baş harflerinin kısaltılmış formudur.
.{
.name = "my_project",
.version = "0.1.0",
}
main.zig
Asıl uygulamanın tüm mantığı bu dosya içerisinde tutulur. Bir nevi geliştirilen uygulamanın giriş ve başlangıç noktasıdır.
Eğer executable(çalıştırılabilir) bir uygulama build (inşaa etmek, ayağa kaldırmak) yapılıyorsa, zig main.zig
dosyasını ()compile) derler ve (run) çalıştırır.
Eğer kendinize ait bir fonksiyon yazmak ve bunu build edip sonuçları görmek istiyorsanız bu fonksiyonu:
main.zig
içinde yazabilirsiniz- başka bir zig dosyasına yazıp
main.zig
içerisine import edebilirsiniz.
const std = @import("std");
pub fn main() void {
const stdout = std.io.getStdOut().writer();
const result = add(5, 7);
// Hataları propagate etmek için try kullanılır.
try stdout.print("5 + 7 = {}\n", .{result});
}
fn add(x: i32, y: i32) i32 {
return x + y;
}
Bu dosyayı iki şekilde çalıştırabiliriz:
zig build run
veya diğer yöntem olarak
zig run src/main.zig
root.zig
Eğer bir kütüphane geliştiriyorsanız main.zig
yerine root.zig
dosyasına kullanır. Bu dosyanın var olma amacı yeniden kullanılabilir modüller (reusable modules), kütüphaneler (libraries), test altyapısı (test infrastructure) yazarken bu dosya tercih edilmelidir.
pub fn greet(name: []const u8) []const u8 {
return "Hello, ";
}
Bu yazdığımız fonksiyonu ise main.zig
dosyamıza aşağıdaki komutu ekleyerek import edebiliriz:
const root = @import("root");
Basit Bir Uygulama
Öncelikle main.zig
içerisinde basit bir toplama işlemi yapan bir uygulama yazalım:
const std = @import("std");
pub fn main() void {
// write into the stdour
const stdout = std.io.getStdOut().writer();
const result = add(5,7);
try stdout.print("5 + 7 = {}\n", .{result});
}
// Returns x + y
fn add(x: i32 , y: i32) i32 {
return x + y
}
şimdi yazdığımız kodu aşağıdaki yöntemlerden biriyle çalıştıralım:
zig build run
Doğrudan çalıştırmak için :
zig run src/main.zig