てきとうなさいと べぇたばん

Go言語でつくるインタプリタを読んだ

arrayを直したとこです

インタプリタを作りたい

前に、インタプリタを作ったことがあったり、ラジコンに声で操作するためのインタプリタを乗っけたりしたことがあったので、インタプリタを作りたくなった。

https://www.oreilly.co.jp/books/9784873118222/

Go言語でつくるインタプリタ

この本は、インタプリタを一からつくる本で、パーサージェネレータを使ったりしないので、動作原理がわかるという本。

原著は Writing An Interpreter In Go で、この本の続編として、 Writing A Compiler In Go という本がある。

Monkeyという言語を作っていくなかで、必要な知識を教えてながら、テストコードを書くことで、内容が正しいことを理解しながら次へ導いてくれる。

この本を写経していくと、多分typoとかに悩まされるだろうけど、そのtypoを解決していくときに何がどうなっているのかを理解するチャンスだったりする。

ちなみに、vimのバージョンを上げてvim-goをサポートする必要のある環境があった。だから、Vimをコンパイルするところから始めた時があった。

Vimをコンパイルするときはこれが初めてだった。

Vimをコンパイルする方法から調べてVim 8.0をインストール。

$ ./configure --with-features=huge --enable-fail-if-missing --enable-python3interp --enable-pythoninterp

configureはこんな感じで、vim-goをインストールできた(はず)。

躓いたところ

なにか天然ボケをかまして、代入の構文letに対して値が返ってこないことを気にしてたらしい。Evalで値を返すことは可能だったことは調べてわかった。。

Go言語でとあるけど、必要なGo言語の知識はそんなになかったりはする。ぼくは宣言不要の代入演算子で躓いてしまったけど。

これをループ内部で書いてしまって、ネストされた構造で原因をつかめなくて結構時間を取られてしまったり。そういうのはあるけど、それも理解するためのプロセスだし、ゴールがインタプリタというすごいものなので、そんなに苦しいというわけでもない。大丈夫だと思う。

おまけとして、文字列比較作ったりしてた。

出来上がる

マクロシステムも読んでみて思ったことは、すごく良い。これで自分でも言語が作れるから、本当に嬉しい。

今後としては、まだよくわからないところがあるからもう一回読もうかなとか、続編の Writing A Compiler In Goを読もうと思ってる。

ソース

私が書いたMonkeyのソースはGitHubに置いとくhttps://github.com/youkidearitai/monkey-interpreter