Zig | |
---|---|
Basisdaten | |
Paradigmen: | imperativ, objektorientiert, funktional, parallel, modular |
Erscheinungsjahr: | 2016 |
Entwickler: | Andrew Kelley |
Aktuelle Version | 0.10.1 (19. Januar 2023) |
Typisierung: | Stark, statisch |
Wichtige Implementierungen: | ziglang |
Beeinflusst von: | C, C++, Rust, Go, JavaScript/TypeScript |
Betriebssystem: | Plattformunabhängig |
Lizenz: | MIT-Lizenz |
ziglang.org |
Zig ist eine seit 2016 von Andrew Kelley entwickelte Programmiersprache mit objektorientierten, imperativen sowie deklarativen Sprachelementen. Sie lehnt sich äußerlich an C und TypeScript an, ohne damit sprachlich kompatibel zu sein. Der Compiler kann die Bibliotheken von C/C++ direkt importieren sowie Header-Dateien für diese Sprache bei der Kompilierung generieren. Die direkt ausführbaren Binärdateien werden in der Ursprungsimplementation durch ein LLVM-Backend erzeugt.
Die Sprache zeigt durch das "comptime" Attribut auf, wie durch Auswertung von Ausdrücken zur Kompilierzeit generische Typen einfacher geschrieben werden können, und dabei laufzeitoptimierter Code entsteht. Bei der Fehlerbehandlung und Parallelausführung lehnt es sich an Go an. Im Gegensatz zu anderen Erweiterungen von C können neue und alte Module frei gemischt werden und erlauben so eine graduelle Umstellung. Die Laufzeitbibliothek wurde nicht erweitert – es genügt eine libc-Implementierung.
Beispiele
Hello World
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
try stdout.print("Hello, {s}!\n", .{"world"});
}
Generische Verlinkte Listen
pub fn main() void {
var node = LinkedList(i32).Node {
.prev = null,
.next = null,
.data = 1234,
};
var list = LinkedList(i32) {
.first = &node,
.last = &node,
.len = 1,
};
}
fn LinkedList(comptime T: type) type {
return struct {
pub const Node = struct {
prev: ?*Node,
next: ?*Node,
data: T,
};
first: ?*Node,
last: ?*Node,
len: usize,
};
}