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!