『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
by
Takuya Mukohira
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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!