Zig (プログラミング言語)

プログラミング言語 From Wikipedia, the free encyclopedia

Zigは、アンドリュー・ケリーによって設計された命令型汎用静的型付けコンパイル型システムプログラミング言語である[2][3]。 この言語は「堅牢性、最適性及び保守性」向けに設計されており[4][5]コンパイル時ジェネリクスリフレクションクロスコンパイル及び手動メモリ管理英語版をサポートしている[6]。 この言語の主な目標は、C言語に依存せずにこれを改善し[7][8]Rustなどから着想を得ることである[9]

パラダイム
登場時期
  • 2015年 ウィキデータを編集
開発者 アンドリュー・ケリー ウィキデータを編集
最新リリース 0.16 / 2026年4月14日[1]
概要 パラダイム, 登場時期 ...
Zig
Zig
Zigのロゴ
Screenshot
パラダイム
登場時期
  • 2015年 ウィキデータを編集
開発者 アンドリュー・ケリー ウィキデータを編集
最新リリース 0.16 / 2026年4月14日[1]
型付け
影響を受けた言語 C言語C++GoRustJavaScript ウィキデータを編集
プラットフォーム クロスプラットフォーム
ライセンス MITライセンス ウィキデータを編集
ウェブサイト
拡張子 zig、zon ウィキデータを編集
テンプレートを表示
閉じる

Zigにはパックされた構造体[注釈 1]、多倍長整数[10]、複数のポインタ型などの低レベルプログラミングのための多くの機能がある[11]

リファレンス実装コンパイラはZig及びC++で記述されており、LLVM[12]をバックエンドとして使用し[13][14]、LLVMがサポートするターゲットの多くをサポートしている[15]。 コンパイラはフリーかつオープンソースで、MITライセンスの条件に基づいて配布されている[14]。 Zigのコンパイラはzig cc及びzig c++をそれぞれ使用することによって、Clangと同様にC言語及びC++をコンパイルすることができる[16]Nimプログラミング言語はC言語のコンパイラとしてzig ccを使用することをサポートしている[17]

コード例

Hello world

// zig version 0.9.1
const std = @import("std");

pub fn main() !void {
    const stdout = std.io.getStdOut().writer();
    try stdout.print("Hello, {s}!\n", .{"world"});
}

ジェネリック連結リスト

// ジェネリックなLinkedList型

const std = @import("std");
const stdout = std.io.getStdOut().writer();

fn LinkedList(comptime T: type) type {
    return struct {
        const Self = @This();
        pub const Node = struct {
            next: ?*Node = null,
            data: T,
        };

        first: ?*Node = null,

        pub fn prepend(list: *Self, new_node: *Node) void {
            new_node.next = list.first;
            list.first = new_node;
        }
        pub fn format(
            list: Self,
            comptime fmt: []const u8,
            options: std.fmt.FormatOptions,
            out_stream: anytype,
        ) !void {
            try out_stream.writeAll("( ");
            var it = list.first;
            while (it) |node| : (it = node.next) {
                try std.fmt.formatType(node.data, fmt, options, out_stream, 1);
                try out_stream.writeAll(" ");
            }
            try out_stream.writeAll(" )");
        }
    };
}

pub fn main() !void {
    const ListU32 = LinkedList(u32);
    var list = ListU32{};
    var node1 = ListU32.Node{ .data = 1 };
    var node2 = ListU32.Node{ .data = 2 };
    var node3 = ListU32.Node{ .data = 3 };
    list.prepend(&node1);
    list.prepend(&node2);
    list.prepend(&node3);
    try stdout.print("{}\n", .{list});
    try stdout.print("{b}\n", .{list});
}
実行結果
( 3 2 1 ) 
( 11 10 1 )

このコードは、Zig言語を使用して単方向連結リスト(LinkedList)を定義し、それを使用して整数の単方向連結リストを作成し、標準出力に出力するプログラムである。

最初の2行では、stdパッケージからioモジュールをインポートし、標準出力ストリームを取得する。

次に、LinkedList関数が定義されている。この関数は、ジェネリックなLinkedList型を作成する。型Tを取り、LinkedList型を返す。このLinkedList型は、Nodeという構造体を含み、それぞれがデータを保持する。また、LinkedList型自体もprependとformatというメソッドを持つ。prependメソッドは、リストの先頭にノードを追加する。formatメソッドは、リストの内容を指定された書式でフォーマットして出力する。

main関数では、LinkedList関数を使用してListU32という型を作成し、整数のLinkedListを作成する。その後、3つのノードを作成し、prependメソッドを使用してリストに追加する。最後に、標準出力にリストを出力する。

脚注

関連項目

外部リンク

Related Articles

Wikiwand AI