Mit comptime führt Zig Code zur Übersetzungszeit aus. So entstehen generische Funktionen und Typen ohne eigene Template-Sprache: Typen sind normale Werte, die man übergeben kann (comptime T: type). Tests schreibst du direkt im Code mit test "name" { ... } und führst sie mit zig test datei.zig aus. Projekte baut das eingebaute Build-System (build.zig), das selbst in Zig geschrieben ist; Zig kann auch C-Code kompilieren und ist ein beliebter Cross-Compiler.
Die Sprache bleibt klein, ist aber überraschend mächtig.
const std = @import("std");
fn maximum(comptime T: type, a: T, b: T) T {
return if (a > b) a else b;
}
test "maximum findet den größeren Wert" {
try std.testing.expectEqual(@as(i32, 9), maximum(i32, 4, 9));
try std.testing.expectEqual(@as(f64, 2.5), maximum(f64, 2.5, 1.0));
}
// zig test datei.zig -> führt die Tests aus
// zig build -> baut das Projekt laut build.zigMerke
comptimerechnet zur Übersetzungszeit- Typen sind Werte:
comptime T: type testundzig testtesten direkt im Code
Aufgabe
Schreibe eine generische kleinste-Funktion mit comptime T: type und einen Test dazu.