見出し画像

『Go言語でつくるインタプリタ』による練習 | Go日記

『Go言語でつくるインタプリタ』 単行本(ソフトカバー) – 2018/6/16
Thorsten Ball (著), 設樂 洋爾 (翻訳)

を読み始めた…というか、書き始めた。

原著も併読している。

『Learning Go』などを通して主に文法やデザインパターンへの理解を進めたことで Go に対する最初のステップは作れたように感じる。自分の仕事用の Go コードも、リファレンスサイトで調べながら「とにかく動くように書く」だけだったらなんとかできる。しかし、そうやってよちよち歩きの Go コードを書き連ねるほど、ドリル的に Go をどんどん書いて書いて書きまくる基礎連が足りてないことを実感する。手習いが必要なのだ。

そのような今の自分の課題感にうってつけだと思ったのが『Go言語でつくるインタプリタ』である。この書籍は、

頭から順番に読め。飛ばすな。そして、読むだけじゃなくて自分で書け。

というタイプの実習教育を目的とした教科書。書くこと+動かすことで意味がわかるように設計されている。まさに自分が望んだ練習課題を提案してくれている。

インタプリタ作成には、プログラムの文字を理解してそれをその後のステップで必要なデータ形式に変換したり、目的に応じた動作を呼び出したり、というアプリケーションの基本が詰まっており、Go のスタイルでアプリケーションを開発していく手法を知るのによいと思った。実際、プログラミングでアプリケーションを作る仕事を思いっきり抽象化すれば、「なんらかのインプットを読み込んでなんらかのアウトプットを行う = フィルターとしてのプログラムを作ること」と言える。特定の業務に特化した業界用語だらけのロジックを扱う課題は、基本を学ぶ目的にはちょっと辛いものがあるが、インタプリタ作成という課題は、プログラマにとってこれ以上無いほど一般的な課題ドメインなので、思う存分基礎連に励むことができる。

実はもうひとつ、自分の過去の挫折経験からこのインタプリタ作成という課題に興味を持ったところがある。何年か前、独自の簡易言語から Python にトランスパイルする仕組みを実装しようとしてあれこれ調べながらトライしてみたのだが、結局完成しなかった。最終目的を達成できずに挫折したが、その課程を通して非常に多くの興味深い概念を学べたし、なによりも、普段の仕事で使っている言語に対して理解が深まった。言語のコンパイラーが吐くエラーの意味をより的確に洞察できるようになった。だから挫折経験そのものは無駄ではなかった。とはいえ、ソースコードが解釈されて実行されるまでの工程に対する理解は表面的なものに留まった。今回の教科書に沿ったインタプリタ作成で、当時の知識不足(ガイド不足?)で達成できなかった部分の謎解きをしたいと思っている。

『Go言語でつくるインタプリタ』を読み始めた本日は、1.3 字句解析器(レキサー) までコードを書き進めた。

SN


この記事が気に入ったらサポートをしてみませんか?