wrinting interpreter in go でRustに入門した

年明けすぐくらいにWriting An Interpreter In Goを読んだというポストを読んだ。
今までコード関係の記事や書籍などを読んでいても、言語処理系の話は(自分なりのイメージはあるにしても)理解があやしかった
聞けば件の書籍では言語処理系の実装を、基本から丁寧に(本来ライブラリで解決するようなところも含めて)コードを見せながら解説してくれているとのこと。
渡りに船と思いWriting An Interpreter In Goを購入した。

ただ写経するのだと身にならない気がするので、写経元のコードとは別の言語で書くことがある
いい機会だったのでついでに前から気になっていたRustにも入門することにした。

前述のブログにも書いてあったが、丁寧な解説もさることながらテストファーストで書かれている。
そのため、各々のコードが期待する機能を少しずつ満たしながら実装できるのが良かった。

Rustの作法で都度引っかかりながら写経したので一冊通してやり切るのに一ヶ月近くかかったが、
最終的に自分の手で書いたインタプリタがきちんと変数・関数を評価して答えを計算してくれたのは感動した(写経しているので当たり前ですが…)

使い方や概念としては理解しているつもりのクロージャが、実際はどういう実装になっているのかを知れたのも良かった
こんな、単なるハッシュマップだったのか…という感じだ(他の言語でどういった処理になっているのかは知らないですが)

Rustを使ってみて色々感想なども出てきたので、それはもうすぐ当番の社内勉強会で発表するつもりだ。
全体としてすごく書きやすいし、コンパイルが通れば大体動く感じの信頼感があって気に入った。しばらくはRustで何か作ったりしてたい。
(とは言えRust独自の概念に慣れるまでは一向にコンパイルが通らず、文字列の結合すらできないワイはダメなやつなんや…と落ち込んだ)

せっかくなので書き終わったところまでのコードを置いておきます
https://github.com/kogai/monkey