2022-07-17に更新

素朴な自作言語のコンパイラをZigに移植した


移植一覧に戻る


※ 一部内容が古いです。二重管理が煩雑なためオリジナルのブログ記事の方だけ加筆修正しています。

やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。

Zig(ziglang)を触り始めて1週間くらいの人が雑に書いたものですので、「お手本にできそうな Zig のコード」「かっこいい Zig のコード」を求めている人には参考にならないと思います。

https://github.com/sonota88/vm2gol-v2-zig


移植元

ベースになっているバージョン: tag:50 のあたり

メモ

  • C と Go の中間、GC のない Go みたいな印象
  • sentinel-terminated な配列もなるほど便利そうと思って使ってみたが、通常の配列とは別の型になって煩雑なのと、サイズ固定な配列の出番が実はほとんどなかったので、後から普通の配列+スライスで書き直していった
  • 例外の扱いも Go とは違ったアプローチでおもしろい。最初は試しに使っていたが、お遊びプログラムなのでまじめにやる必要ないかと思い直し、これも後から使わないように(Java でいえば検査例外をその場で RuntimeException に包んで投げ直す感じに)書き変えた。単に煩雑さを避けるのを優先した形なのでほんとはちゃんとハンドリングすべきと思います。
  • 型まわりの理解がまだいまいち(配列や const が絡むあたりとか)
  • あと細かい話がいろいろあった気がするけど、作った後このエントリを書くまで他のことをしていたら忘れてしまった……
  • 今回はあんまり余裕なかったので実験的な要素はなし
Originally published at zenn.dev
ツイッターでシェア
みんなに共有、忘れないようにメモ

sonota486

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント