Writing an Interpreter in Go
統計解析のためにRのコードを書く機会があったのだけど、
これまで「お行儀のいい」言語に慣れていた身からすると、
dplyr
で活用されているメタプログラミングのようなもの(いわゆるnon-standard evaluationと呼ばれている奴ら)の
識別子とデータがコード上で厳密に区別されずにごちゃ混ぜになっている「柔らかさ」には強い違和感を覚えた。
どうなっているのか訳が分からないと感じたが、一方でこれも結局のところコンピューターで動いているわけだから、 この振る舞いにも厳密なセマンティクスが存在していることには違いない。 Rの文法は一見すると、常識的な手続き型言語のような見た目をしているが、その内部はSchemeのようなLisp系言語に近いようである。 また別のところでRのメタプログラミングやtidyverseの非正格評価についても整理したいと思っているが、 そんな不思議言語に触れ(ざるを得なかっ)たことをきっかけに、言語処理系の中身への興味が再燃した。
パーサーの書き方や、クロージャーがどう実装されるのかとか、そういうことを理解するには 作ってみるのが一番手っ取り早いだろうということで、 Writing an Interpreter in Goという本を読んでみた。 僕の理解度には適切なレベルで、とても面白く読み進めることができた。
せっかくなので、この本の内容について、自分の理解を整理するためにも、 感想をまとめておくことにする。