tag:crieit.net,2005:https://crieit.net/tags/Zig/feed 「Zig」の記事 - Crieit Crieitでタグ「Zig」に投稿された最近の記事 2022-07-17T10:04:04+09:00 https://crieit.net/tags/Zig/feed tag:crieit.net,2005:PublicArticle/16562 2021-01-07T23:57:33+09:00 2022-07-17T10:04:04+09:00 https://crieit.net/posts/Zig 素朴な自作言語のコンパイラをZigに移植した <hr /> <p><a target="_blank" rel="nofollow noopener" href="https://memo88.hatenablog.com/entry/2020/08/30/132314">移植一覧に戻る</a></p> <hr /> <p><strong>※ 一部内容が古いです。二重管理が煩雑なため<a target="_blank" rel="nofollow noopener" href="https://memo88.hatenablog.com/entry/2021/01/07/235019">オリジナルのブログ記事</a>の方だけ加筆修正しています。</strong></p> <p>やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ziglang.org/">Zig(ziglang)</a>を触り始めて1週間くらいの人が雑に書いたものですので、「お手本にできそうな Zig のコード」「かっこいい Zig のコード」を求めている人には参考にならないと思います。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/sonota88/vm2gol-v2-zig">https://github.com/sonota88/vm2gol-v2-zig</a></p> <hr /> <h1 id="移植元"><a href="#%E7%A7%BB%E6%A4%8D%E5%85%83">移植元</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://memo88.hatenablog.com/entry/2020/05/04/155425">Rubyで素朴な自作言語のコンパイラを作った</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://memo88.hatenablog.com/entry/2019/05/04/232236">RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話</a></li> </ul> <p>ベースになっているバージョン: <a target="_blank" rel="nofollow noopener" href="https://github.com/sonota88/vm2gol-v2/tree/50">tag:50</a> のあたり</p> <h1 id="メモ"><a href="#%E3%83%A1%E3%83%A2">メモ</a></h1> <ul> <li>C と Go の中間、GC のない Go みたいな印象</li> <li>sentinel-terminated な配列もなるほど便利そうと思って使ってみたが、通常の配列とは別の型になって煩雑なのと、サイズ固定な配列の出番が実はほとんどなかったので、後から普通の配列+スライスで書き直していった</li> <li>例外の扱いも Go とは違ったアプローチでおもしろい。最初は試しに使っていたが、お遊びプログラムなのでまじめにやる必要ないかと思い直し、これも後から使わないように(Java でいえば検査例外をその場で RuntimeException に包んで投げ直す感じに)書き変えた。単に煩雑さを避けるのを優先した形なのでほんとはちゃんとハンドリングすべきと思います。</li> <li>型まわりの理解がまだいまいち(配列や const が絡むあたりとか)</li> <li>あと細かい話がいろいろあった気がするけど、作った後このエントリを書くまで他のことをしていたら忘れてしまった……</li> <li>今回はあんまり余裕なかったので実験的な要素はなし</li> </ul> sonota486