(Translated by https://www.hiragana.jp/)
Zig (プログラミング言語) - Wikipedia コンテンツにスキップ

Zig (プログラミング言語げんご)

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Zig
Zig
Zigのロゴ
パラダイム
登場とうじょう時期じき
  • 2015ねん ウィキデータを編集
開発かいはつしゃ アンドリュー・ケリー ウィキデータを編集
最新さいしんリリース 0.13.0 / 2024ねん6がつ6にち[1]
型付かたつ
影響えいきょうけた言語げんご C言語げんごC++GoRustJavaScript ウィキデータを編集
プラットフォーム クロスプラットフォーム
ライセンス MIT License ウィキデータを編集
ウェブサイト
拡張子かくちょうし zig ウィキデータを編集
テンプレートを表示ひょうじ

Zigは、アンドリュー・ケリーによって設計せっけいされた命令めいれいがた汎用はんよう静的せいてき型付かたつコンパイルがたシステムプログラミング言語げんごである[2][3]。 この言語げんごは「堅牢けんろうせい最適さいてきせいおよ保守ほしゅせいけに設計せっけいされており[4][5]コンパイルジェネリクスリフレクションクロスコンパイルおよ手動しゅどうメモリ管理かんり英語えいごばんをサポートしている[6]。 この言語げんごおも目標もくひょうは、C言語げんご依存いぞんせずにこれを改善かいぜん[7][8]Rustなどから着想ちゃくそうることである[9]

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メソッドを使用しようしてリストに追加ついかする。最後さいごに、標準ひょうじゅん出力しゅつりょくにリストを出力しゅつりょくする。

脚注きゃくちゅう[編集へんしゅう]

注釈ちゅうしゃく[編集へんしゅう]

  1. ^ フィールドあいだのパディングがゼロの構造こうぞうたいのこと。

出典しゅってん[編集へんしゅう]

  1. ^ 出典しゅってんURL: https://ziglang.org/download/#release-0.13.0, 題名だいめい: Release 0.13.0
  2. ^ Motroc, Gabriela (2017ねん10がつ31にち). ““Zig has all the elegant simplicity of C, minus all the ways to shoot yourself in the foot””. JAXenter. 2021ねん1がつ1にち閲覧えつらん
  3. ^ Elizabeth, Jane (2017ねん10がつ19にち). “Tired of C? New programming language Zig aims to be more pragmatic and readable”. JAXenter. 2021ねん1がつ1にち閲覧えつらん
  4. ^ Yegulalp, Serdar (2016ねん8がつ29にち). “New challenger joins Rust to topple C language”. InfoWorld. 2021ねん1がつ1にち閲覧えつらん
  5. ^ ITこれ (2020ねん7がつ12にち). “そうがえだい C てき Zig 语言成立せいりつりょう基金ききんかい” (中国ちゅうごく). しんなみすう码. 2021ねん1がつ1にち閲覧えつらん
  6. ^ The Zig Programming Language”. ziglang.org. 2021ねん1がつ1にち閲覧えつらん
  7. ^ Mozilla’s Observatory, the Zig programming language, and uSens’ VR/AR SDK—SD Times news digest: Aug. 29, 2016”. SD Times (2016ねん8がつ29にち). 2021ねん1がつ1にち閲覧えつらん
  8. ^ Zig competes with C instead of depending on it”. ziglang.org. 2021ねん1がつ1にち閲覧えつらん
  9. ^ Kelley, Andrew (2018ねん1がつ24にち). “Unsafe Zig is Safer than Unsafe Rust”. andrewkelley.me. 2021ねん1がつ1にち閲覧えつらん
  10. ^ Anderson, Tim (2020ねん4がつ24にち). “Keen to go _ExtInt? LLVM Clang compiler adds support for custom width integers”. The Register. 2021ねん1がつ1にち閲覧えつらん
  11. ^ Documentation - The Zig Programming Language”. ziglang.org. 2021ねん1がつ1にち閲覧えつらん
  12. ^ Lewkowicz, Jakub (2020ねん4がつ14にち). “SD Times news digest: C++20 concepts in Visual Studio 2010 version 16.3, Bootstrap to drop IE support, and Zig 0.60 released”. SD Times. 2021ねん1がつ1にち閲覧えつらん
  13. ^ Bill, Ginger (2019ねん5がつ13にち). “A Reply to The Road to Zig 1.0”. gingerBill. 2021ねん1がつ1にち閲覧えつらん
  14. ^ a b ziglang/zig”. GitHub. 2021ねん1がつ1にち閲覧えつらん
  15. ^ Tier System”. ziglang.org. 2021ねん1がつ1にち閲覧えつらん
  16. ^ zig cc”. ziglang.org (2020ねん4がつ13にち). 2021ねん1がつ1にち閲覧えつらん
  17. ^ Add support for `zig cc` as C compiler. #13757”. GitHub. 2021ねん1がつ1にち閲覧えつらん

関連かんれん項目こうもく[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]