Zig (Programmiersprache)

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.

Zig
Basisdaten
Paradigmen: imperativ, objektorientiert, funktional, parallel, modular
Erscheinungsjahr: 2016
Entwickler: Andrew Kelley
Aktuelle Version: 0.8.1  (7. September 2021[1])
Typisierung: Stark, statisch
Wichtige Implementierungen: ziglang
Beeinflusst von: C, C++, Rust, Go, JavaScript/TypeScript
Betriebssystem: Plattformunabhängig
Lizenz: MIT License
ziglang.org

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 besser 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, {}!\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,
    };
}

Einzelnachweise

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.