Learning Zig #1

ZigがはやってるらしいのでHelloWorldぐらいやっておこうと思った。

Getting Startedに沿って環境を準備。

といっても、zipをダウンロードして展開後そこにPATHを通すだけ。

ついでに、makeも用意した。windows環境なのでGnu for Windowsのバイナリ。 wingetでインストールできるので楽ちん。
PATHは別途通さないとだめ。

> winget install GnuWin32.Make

zigの面白いなと思ったところが、c(c++)言語が、そのまま、コンパイルできるらしいということ。

TypeScriptみたいだな。

Goがでたころ、Better Cっていう表現されてたけど、そのままコンパイルできるzigがでてきたのでBetter Cのポジションはzigが奪っていくのかなあ。Goと違ってGCなしなのもいいなと思った。

同じGCなしだと、Rustがあるけど、Rustに比べてZigのメモリ管理はプログラマ任せ。Cみたいにメモリリーク発生してしまうけど、Go同様defer構文があるので、Cよりもプログラマに優しい。

zigをコンパイルする前に、このCをそのままコンパイルできるってのを試してみる。

次のファイルを用意した。

// main.c
#include <stdio.h>

int main(void) {
    printf_s("Hello,World!!\n");
    return 0;
}
# Makefile
OBJS=main.o
CMD=helloworld.exe
RM=del

CFLAGS+= -g -fexec-charset=UTF-8 -finput-charset=UTF-8

CC=zig cc

build: $(OBJS)
    $(CC) $(CFLAGS) -o $(CMD) $(OBJS)

main.o: main.c
    $(CC) $(CFLAGS) -c main.c -o main.o

clean:
    $(RM) "$(CMD)"
    $(RM) *.o
    $(RM) *.ilk
    $(RM) *.pdb

make buildして実行すると、確かに動いてる。

> make build
> ./helloworld.exe
Hello,World!!
>

そのままコンパイルできるとは言え、コマンドは zig cc で別なのか。

次はzigファイルであれこれしてみよう。


You'll only receive email when they publish something new.

More from iwate
All posts