検索
特集/連載

C、C++の後継「Zig」が“プログラミングの未来”なのはなぜかプログラミング言語「Zig」とは【後編】

「Zig」は、「C」「C++」の後継を目指す比較的新しいプログラミング言語だ。将来のプログラミングの一つの展望を映し出すそのアプローチとは。Zigのメリットを解説する。

Share
Tweet
LINE
Hatena

関連キーワード

プログラマー | プログラミング


 「Zig」は「C」「C++」の後継を目指す比較的新しいプログラミング言語だ。現代的な言語設計と安全性を取り入れており、さまざまなメリットを備える。Zigはプログラミング言語の“一つの展望”を映し出す存在だ。Zigの主なメリット5つのうち、本稿は5つ目を取り上げる。

「Zig」が“プログラミングの未来”なのはなぜ?

メリット5.デバッグが容易

 そもそもデバッガーは、プログラムを1行ずつ実行するためにシンボル(ソースコード内の変数や関数などの要素と実行可能ファイル内の要素を対応付ける情報)を生成しなければならない。これはプログラムをデバッグモードで別途コンパイルする手間を要する。加えて、デバッグモードで作成した実行可能ファイルは実行速度が遅い場合がほとんどであり、デバッグの時間を増やす原因になる。

 Zigは組み込み関数である「@breakpoint()」を使用して、開発者がソースコードにブレークポイントを設置できるようにしている。例えば変数の値を表示する「std.debug.print()」関数の呼び出し直後に@breakpoint()を挿入することで、特定の変数の状態を確認したい箇所で、実行を一時中断できるようになる。

 ソースコードにブレークポイントを設定できるようになることでデバッグの効率が上がる他、リリースバージョン用とデバッグ用でソースコードを分けて作成する必要がなくなる点もメリットだ。

 次のソースコードが、「main.zig」というファイルにあるとする。このソースコードは、繰り返し構造の「for」ループ内に@breakpoint()関数を配置している。

const std = @import("std");
pub fn main() void {
    for (0..3) |i| {
       std.debug.print("i = {}", .{i});
       @breakpoint();
    }
}

 このソースコードでは、ループの反復回数を示す変数iの値を表示するprint()関数を呼び出した直後に、@breakpoint()を配置している。ループの反復ごとに@breakpoint()の直前プログラムの実行が一時停止し、iの値が表示される。

 画面に示す実行例では、main.zigをコマンドラインツールでコンパイルして実行する際、「ReleaseFast」モードを指定している。ReleaseFastモードは、リリースバージョン向けに可能な限り最適化して実行可能ファイルを生成するモードだ。次に、デバッガー「GNU DeBugger」(GDB)を呼び出して、先ほど生成した実行可能プログラム名を指定して実行する。GDBが起動したら、「r」(実行)コマンドを入力して「Enter」キーを押す。プログラムはiの値を表示し、@breakpoint()を挿入したで停止する。「c」(再開)コマンドを入力してEnterキーを押すと、プログラムの実行が再開する。以降のループでは、Enterキーを押せば、デバッガーは直前に入力したコマンド(ここではcコマンド)を繰り返す。

画面
画面 Zigでのデバッグ例

 かつてインタープリタ言語の専売特許だった機能を、コンパイル言語も搭載するようになった。この流れは、インタープリタ言語のメリットを維持しつつプログラムの実行速度を向上させる動きを示すものだ。こうしたトレンドはプログラミング言語の将来の展望を浮き彫りにしている。Zigもこのトレンドを追い、コンパイル言語の限界を押し広げながら、シンプルながらも強力なプログラミング言語を目指している。

TechTarget発 エンジニア虎の巻

米国TechTargetの豊富な記事の中から、開発のノウハウや技術知識など、ITエンジニアの問題解決に役立つ情報を厳選してお届けします。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る