プログラミング言語 Zig で Hello World

2022-03-22  /  Zig

Zig という言語があるのでひとまず Hello World からやってみました。

Zig については以下を参考にしてください。

Getting Started ⚡ Zig Programming Language に従って進めていきます。

インストール

Mac だと Homebrew でインストールできます。 執筆時点では最新版は 0.9.1 が利用可能になっていました。

$ brew install zig
$ zig version
0.9.1

エディタの設定

公式サイト(Tools ⚡ Zig Programming Language)でツールが紹介されています。Language Server をインストールして VS Code の拡張機能を設定します。

zls の設定

GitHub のページに記載の手順にしたがって導入します。

$ mkdir $HOME/zls && cd $HOME/zls \
&& curl -L https://github.com/zigtools/zls/releases/download/0.9.0/x86_64-macos.tar.xz \
| tar -xJ --strip-components=1 -C .
# zlsの実行権限がないので付与
$ chmod +x ./zls

zls config を実行します。オプションの設定はとりあえず全部 y にしました。

$ ./zls config
Welcome to the ZLS configuration wizard!
      *
       |\
      /* \
      |  *\
    _/_*___|_    x
      | @ @     /
     @     \   /
      \__-/   /

? Should this configuration be system-wide? (y/n) > n
Found zig executable '/usr/local/bin/zig' in PATH.
? Which code editor do you use? (select one)

  - VSCode
  - Sublime
  - Kate
  - Neovim
  - Vim8
  - Emacs
  - Doom
  - Other

> VSCode
? Do you want to enable snippets? (y/n) > y
? Do you want to enable style warnings? (y/n) > y
? Do you want to enable semantic highlighting? (y/n) > y
? Do you want to enable .* and .? completions? (y/n) > y
Writing config to /Users/kawaken/Library/Application Support/zls.json ... successful.



To use ZLS in Visual Studio Code, install the 'ZLS for VSCode' extension from
'https://github.com/zigtools/zls-vscode/releases' or via the extensions menu.
Then, open VSCode's 'settings.json' file, and add:

"zigLanguageClient.path": "[command_or_path_to_zls]"

Thank you for choosing ZLS!

指示に従い ZLS for VSCode をインストールをして zigLanguageClient.path を設定しました。

VSCode の拡張機能

zig で検索すると出てくる Zig - Visual Studio Marketplace をインストールします。

特に設定はないようです。

Hello World を実装する

サイトに記載のコマンドを実行して、コードを書いていきます。

$ mkdir hello-world
$ cd hello-world
$ zig init-exe
info: Created build.zig
info: Created src/main.zig
info: Next, try `zig build --help` or `zig build run`

ファイル・ディレクトリは以下のようになりました。

$ tree
.
├── build.zig
└── src
    └── main.zig

1 directory, 2 files

main.zig を修正していきます。もともと以下のようなコードが記述されています。

const std = @import("std");

pub fn main() anyerror!void {
    std.log.info("All your codebase are belong to us.", .{});
}

test "basic test" {
    try std.testing.expectEqual(10, 3 + 7);
}

std.log.info を使用すると info: というプリフィックスがつくようなので print を使用してみます。以下のコードは公式のチュートリアルを参考にしました。

Chapter 0 - Getting Started | ziglearn.org

const std = @import("std");

pub fn main() anyerror!void {
    std.debug.print("Hello, {s}!\n", .{"World"});
}

コンパイルと実行します。zig run というコマンドで直接実行可能のようです(Go のようですね)。

$ zig run src/main.zig
Hello, World!

zig build で実行形式ファイルを生成できるようです。zig-cachezig-out の下にいろいろとファイルが生成されていました。

$ zig build
$ tree
.
├── build.zig
├── src
│   └── main.zig
├── zig-cache
│   ├── h
│   │   ├── 61730d100cc7930300792893c6942c73.txt
│   │   ├── 791bacaf5c7333e736fd58ba29d92650.txt
│   │   ├── a0ed1fdf9e8f39b6527783f08694369f.txt
│   │   ├── cd91e13c197f99609ec79bf7f3c67967.txt
│   │   └── timestamp
│   ├── o
│   │   ├── 5922002f2d938791dd84c32287f8b32b
│   │   │   ├── build
│   │   │   ├── build.o
│   │   │   ├── builtin.zig
│   │   │   ├── stage1.id -> 8aaadc9da442e8b3b3474b2b2b22ab1320
│   │   │   └── zld.id -> 48a0549aafc1de4d7df4fe6cc3cb30a0
│   │   └── 91614114422a54284ee323285d69daa5
│   │       ├── builtin.zig
│   │       ├── hello-world
│   │       ├── hello-world.o
│   │       ├── stage1.id -> b78a98d47c3ffa3224f209e63203f8ee20
│   │       └── zld.id -> 771b687dd3820d15bac8e8f597eb8150
│   └── z
│       ├── 2d1fdc4cd88730da39ff42daede6a1cb
│       └── 4df82f8b3b717e74de2def4856d06651
└── zig-out
    └── bin
        └── hello-world

9 directories, 20 files

hello-world を実行します。

$ ./zig-out/bin/hello-world
Hello, World!

zig run と同じように出力されました。build.zig にビルドの設定が記述されているようですが、おいおい確認していこうと思います。

Published: 2022-03-22  /  Tags: Zig  /  Share: X