Zig 0.8.0のリリースノートを読む
目的
- Zig 0.8.0で気になった部分の感想を書く
- Zennのスクラップのテスト
リンク
Zig公式
Zig 0.8.0のリリースノート
No MSVC Dependency by Default
Zigを使用してWindowsでC/C++をコンパイルする際のデフォルトをMinGWに変更。
MSVCは他二つ(GCC,Clang)と違う部分が多いのでデフォルトをGCC(MinGW)にしてくれるのは互換性の面で恩恵が大きそう。何よりMSVCをインストールしなくてもZig単体でC/C++をコンパイルできるようになったのは便利。
ポータブルなCコンパイラとして、より使いやすくなった印象。
macOS Support
arm64, macOSでコード署名されたバイナリを生成できるように対応。
これも上と同じくXCodeなしでもZig単体でC/C++がコンパイル可能なのが便利そう。
C/C++のクロスコンパイル用のコンパイラとしての価値が増している。
Language Changes
細かい変更がメイン。
後述されるセルフホストコンパイラが現在のメインターゲットなので文法的に大きな変更は無し。
Self-Hosted Compiler
今回のメインターゲットのセルフホストコンパイラ(ただしStage2)
完了しているのはStage2までのターゲットでStage1は次の0.9で対応予定(?)
なので、まだ恩恵は受けられないが面白い事が色々書いてある。
Reworked Memory Layout
Zigコンパイラ内の処理をデータ指向のデザインに変更。
Data-Oriented Designを踏まえてキャッシュを活かしたメモリレイアウトにすることでコンパイラの高速化を図ったというお話。
具体的なAST構築のの処理内容は置いておいて高速化されることが嬉しいのと、ZIRというZig用の中間表現が登場している所に興味を惹かれる。
Whole-File AST Lowering
ASTからZIRへ翻訳する際の処理を修正した(?)
この辺りは言語の内部処理に詳しくないので、正直良くわからない。
が、後半の図を見るにファイルによるキャッシュ処理をZIRまでキャッシュできるようになった様子。
キャッシュされたZIRを解析して、より多くのエラーをキャッチするなどIDEでサポートできる要素が多くなると良いなという妄想。
多分、一番大きいメリットは2回目以降のコンパイルの高速化だと思う。
Self-Hosted Linker
macOSのサポートのためにセルフホストリンカーを作成。
macOSのデフォルトのリンカーが貧弱でクロスコンパイルのサポートが難しかったのでリンカーを自作(LLDへの依存をなくす目的もある)
完全にZigで記述されていて、実際にStage1のmacOSサポートで使用。
macOSは利用していないけどZigでリンカーが構築されているというのは、Zigのユースケースとして面白い。
Cが使われている領域で使用に耐えうるソフトウェアをZigで構築できるんだという証明にもなっている。
Standard Library
破壊的な変更含めて沢山。
言語として安定するのはセルフホストコンパイラが構築された後なので、それまではガンガン変更される模様。
Zig Build System
細かい変更が沢山。
こちらも言語の安定を待ってから固める予定。
個人的にはエラーが見にくいので色付けするなり、フォーマットを整えて欲しいんだけど、どこかのIssueでリッチな出力はしない、みたいなことを言及されていた記憶。
IDE側でキャッチして、そっちでゴニョゴニョする事になるんだろうか。
Roadmap
0.9.0のターゲットは言語の安定化、言語仕様の草案、セルフホストコンパイラ。
パッケージマネージャは言語の安定化後に構築する予定。
0.9.0という部分だけ見ると正式リリースが見えてきたなと思えてくる。現状は0.8.0だし、そこから長かったりするけど(バージョン0.10.0)
セルフホストコンパイラが安定しないと他の部分も安定しないということで、しばらくはセルフホストコンパイラに焦点が当たることになりそう。
感想
スクラップにまとめてみて
普段は適当に流し見するだけだったけど「Zennに登録したし何か書いてみるか」ということで書いてみた。
- 書くので用語に気を遣う
- 時間がかかる(1時間)
- 書くことが為になるかは謎
仕事で使っているわけでも、趣味のプロダクトで使っているわけでもないので完全に趣味の楽しみとして書くのが良さそう。
勉強とか為になるとか考えてやるものじゃない(超マイナー言語の情報だし)
趣味として書く分には可もなく不可も無く。
言語の裏側的な話は面白かった。
Zigについて
今回はセルフホストコンパイラがメインということでバックの話が多い印象。
言語的にもCが活躍している領域の置き換えを狙っているので尚のことそういう話が多いのかもしれないけど。
セルフホストコンパイラ、セルフホストリンカーといい公式自体がZigのユースケースとなっているのは良いと思う。
Zigが求められている領域にもマッチしているように感じる。
何にせよセルフホストコンパイラが早く安定してほしい。Issueを見るとラムダとかクロージャー関連の議論もされているが、これらが実装できるのはセルフホストコンパイラが安定した後だろう。
文法的に、どういう所に着地するかが気になる。
個人的にはメタプログラミング関連で何かしらの支援機能(Interface, Traits, Conceptなど)が入ってほしいんだけど、却下されてるIssueも多いしどうなるか。
CコンパイラとしてのZigがどんどん使いやすくなっていく印象。
Cはハードに近すぎて周りの環境に影響され過ぎるなと思っていたけどZigが色々と解決してくれそう。
Zigという言語自体も面白いけどCの環境を改善するツールとしても注目していきたい。
使いどころが大分ニッチな言語になりそうな気はするが自分としては期待しているので、今後も注目していきたい。