『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
by
Takuya Mukohira
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Let's enjoy crafting interpreters! 〜『インタプリタの作り方』の紹介〜 2024年05月24日(金) SmartHR LT大会 mktakuya / Takuya Mukohira SmartHR プロダクトエンジニア
Slide 2
Slide 2 text
5月入社のmktakuyaです
Slide 3
Slide 3 text
前職を退職後
Slide 4
Slide 4 text
無職期間1.5ヶ月
Slide 5
Slide 5 text
やったこと
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
(技術的に)やったこと
Slide 9
Slide 9 text
https://book.impress.co.jp/books/1122101087
Slide 10
Slide 10 text
『インタプリタの作り方』 著: Robert Nystrom / 訳: 吉川邦夫 出版: インプレス / 2023年9月 ・インタプリタ自作 をやっていく本 ・Loxという著者オリジナル言語 ・手書きパーサ派 (lexerも自作) ・Java / C言語を用いて、 2つのインタプリタを つくる
Slide 11
Slide 11 text
出典: インタプリタの作り方( Robert Nystrom, 2023: p.14)
Slide 12
Slide 12 text
2つのインタプリタ
Slide 13
Slide 13 text
第1のインタプリタ: jlox
Slide 14
Slide 14 text
・jlox: JavaによるLoxのインタプリタ ・ツリーウォーク型のインタプリタ ・ASTを再帰関数でたどる (まさにツリーをウォーク する!) ・おそい
Slide 15
Slide 15 text
第2のインタプリタ: clox
Slide 16
Slide 16 text
・clox: C言語によるLoxのインタプリタ ・バイトコード式の仮想マシン ・Loxのコードをコンパイル し、 バイトコードを生成 →VMで実行する ・はやい
Slide 17
Slide 17 text
???
Slide 18
Slide 18 text
ツリーウォーク型インタプリタ: jlox → 1.8以前のCRuby と同じ バイトコード式の仮想マシン: clox → 1.9(YARV)以降のCRubyと同じ
Slide 19
Slide 19 text
つまり……
Slide 20
Slide 20 text
ツリーウォーク型インタプリタ: jlox → Matzになれる!!! バイトコード式の仮想マシン: clox → ko1さんになれる!!!
Slide 21
Slide 21 text
と言っても 過言ではない!!!(過言)
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
所感
Slide 24
Slide 24 text
・単に、いちプログラマとしての幅が広がった ・言語処理系の知識がざっくり身についた → 用語としては知っていた各解析やバイトコード、 スタックマシン型VMなどをつくることを通して理解。 ・これまで触れなかった言語に触れたいと思うようになった → 言語の設計についてのコラムで、 他の言語を例に出したり、設計アイデアを拝借したり。 LuaやSmalltalk、そしてLISPを触ってみたくなった。
Slide 25
Slide 25 text
・RubyKaigiの議論を理解 するのに役立った ・パーサ系トーク →「手書きパーサ」「パーサジェネレータ」の比較。 本で手書きパーサを書いたおかげで、 それぞれのメリデメなどをなんとなく理解できる。 ・VM系トーク → LoxのバイトコードはYARVとは違うが基本は一緒。 スタックマシンという意味では一緒なので爆わかり。
Slide 26
Slide 26 text
・一方で…… ・Rebuild EP153 rui314さん回の話を思い出す。 → ruiさんがCコンパイラをスクラッチで書いた話。 「自作言語を作るのも楽しいけど、既存言語もいい。 既存の言語でセルフホスティングも目指す となると 全部やる(手抜き NG)ので勉強に なる。」(要約) ・これは実際そうだなーと思った。 → 書籍でも自分でも、簡略化のために省いたもの多し。 https://rebuild.fm/153/#t=01:01:45
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
おわりに
Slide 29
Slide 29 text
・無職期間をやる前に、 → 「普段は絶対やらないようなことやろう」 と決めた。 Webアプリやツール開発は仕事終わりに勝手にやるので。 ・せっかくならCSっぽいことや低レイヤっぽいこと やろう! → “プログラミング”にちゃんと向き合いたいし、 言語でも作るか、で『インタプリタの作り方』に出会う。
Slide 30
Slide 30 text
・インタプリタの作り方は、 たぶんSmartHRでの仕事にはあんまり役に立たない…… ・けど、 RubyKaigiでRubyをつくる人たちを見てシビれたように ・『インタプリタの作り方』を読んで Matzやko1さんに近づいたつもりになってみるのもアリ!?
Slide 31
Slide 31 text
Let's enjoy crafting interpreters!