低レイヤを知りたい人のための Cコンパイラを Rust で作っている

hkdnet.hatenablog.com

↑の続きというわけで Rust 版を作っている

github.com

Rust 化して気づいたのは Vec なる tokens を consume していくような形にすると毎回食べ終わった Vec を返す必要がありそこそこだるいということだった。これは Vec は固定的なものであるというように捉えて index だけ返すようにしたほうがいいかもしれない。

また、Node について binary operator を考えると当然 Node<Node, Node> のようなものにならざるを得ないのだが1、この場合に Node が再帰的に定義されてしまうため、sizeof(Node) が一意に定まらないという問題があることがわかった。この場合に Rust 的には Box をもつようにして heap 領域に確保したメモリへのポインタをもつことで stack として確保すべき領域を決定的にしているということがわかった。おもしろい。確かにCで書くときも *Node みたいなメンバ宣言にするしなあ。

Rust 特有のアレコレについて悩みながらもやっている。特にCが書けるようになりたいわけでもないので2このまま Rust 版を育てるかもしれない。


  1. なお実際には NodeType にもたせている

  2. 別に読めればいい