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ファイルであれこれしてみよう。