Learning Zig #1
October 3, 2022•91 words
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ファイルであれこれしてみよう。