Zig (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 24. Mai 2022 um 11:02 Uhr durch imported>Boemmels(54231) (Neue Version verfuegbar, +Vorlage).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zig
Datei:Zig logo 2020.svg
Basisdaten
Paradigmen: imperativ, objektorientiert, funktional, parallel, modular
Erscheinungsjahr: 2016
Entwickler: Andrew Kelley
Aktuelle Version: 0.9.1  (25. Februar 2022[1])
Typisierung: Stark, statisch
Wichtige Implementierungen: ziglang
Beeinflusst von: C, C++, Rust, Go, JavaScript/TypeScript
Betriebssystem: Plattformunabhängig
Lizenz: MIT License
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 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,
    };
}

Weblinks

Einzelnachweise

  1. Zig 0.9.1 Release Notes. 25. Februar 2022, abgerufen am 23. Mai 2022 (englisch).