🦍

「Go言語で作るインタプリタ」をやった感想

2021/08/02に公開

初めに

Go言語でつくるインタプリタに沿って本章をひととおり写経したので、次の所感についてざっくりまとめます。

  • 本の紹介
  • 動機
  • やってみた感想
  • 次の目標

インタプリタ本について

Go言語で標準パッケージのみを使って、フルスクラッチでインタプリタを作る本です。

https://twitter.com/gorilla0513/status/1421836719066738691?s=20

言語仕様はシンプルで、できることも少ないんですが、レキサー、パーサの実装、astを評価する方法について学べる本となっています。
この本を完遂すれば、インタプリタがどのように動いているのかを理解できます。
より詳細な内容については目次を読んでみてください。

動機

自分は将来、プログラミング言語を作る仕事に就きたいと思っていますが、これまで言語を作ったことはなかったのです。
言語を作るのはとてもハードルが高いと感じていたので、なかなか踏み出せずにいました。
しかしこのままだと永遠に「言語を作りたい」で人生終わってしまうので、気合を入れて言語を作ることにしました。

しかし、いきなり言語を作れないので、そこでインタプリタ本をまず完遂することにしました。
この本は以前、途中までやりましたが、最後までやりきって「言語の作り方」について理解することで、言語を作る足掛かりにしようと考えていました。

実際やってみた結果、得られたことがたくさんあったので、自分の中ではリーダブルコードに続く「神本」認定しました。

やってみた感想

やってみた結果、次の知識を得られました。(パーサが一番の鬼門でした)

  • レキサーの作り方
  • パーサの作り方
  • astの評価のやり方

また、個人的に一番の収穫は「プログラミング言語を作るのは、思っていたよりも難しくないかも」と感じたことです。
もちろん、本書でつくる言語は仕様がシンプルで教育用なのでそれほど難しくないレベルに留めていますが、それでもこんな簡単に作れるんだって思いました。
特に評価の実装は、驚くほど簡単でサクサクと進められました。

やはりやってみることは大事だなとあらためて思いました。

次の目標

インタプリタ本の続編であるWriting A Compiler In Goをやります。
この本はインタプリタ本で作った言語の評価の部分を、VMに置き換えていく様です。
VMやバイトコードについて実践しつつ学べる様ので、とても楽しみです。(英語なのが辛いけど…)
VM型のコンパイラの作り方がわかれば、次は自作言語について着手していこうかなと考えていますが、
もしかすると既存の言語処理系を実装してみるのがよいかもしれないなと思ったりもしています。

Discussion