Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpre...
Search
Takuya Mukohira
June 01, 2024
Technology
1
1k
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
Takuya Mukohira
June 01, 2024
Tweet
Share
More Decks by Takuya Mukohira
See All by Takuya Mukohira
Podcasting Guide 2024
mktakuya
3
1.2k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
870
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
1.8k
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
2.7k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
340
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.3k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1.1k
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
330
HMCC2019 Emoji SANPO
mktakuya
0
3.2k
Other Decks in Technology
See All in Technology
20250309 無冠のわたし これからどう先生きのこれる?
akiko_pusu
11
2k
データモデルYANGの処理系を再発明した話
tjmtrhs
0
550
Oracle Cloud Infrastructure IaaS 新機能アップデート 2024/12 - 2025/02
oracle4engineer
PRO
0
140
Kubernetesを手元で学ぼう! 初心者向けローカル環境のススメ
nayaaaa
PRO
1
390
俯瞰と個別の⼆つの視点で紡ぐ スクラムマスターの成⻑と協働 / Dual Views Weaving Scrum Master Growth
toma_sm
1
120
Qiita Organizationを導入したら、アウトプッターが爆増して会社がちょっと有名になった件
minorun365
PRO
1
410
貧民的プログラミングのすすめ
kakehashi
PRO
2
360
Log Analytics を使った実際の運用 - Sansan Data Hub での取り組み
sansantech
PRO
0
280
エンジニア採用と 技術広報の実践/acaricsummit2025
nishiuma
1
160
OCI IAM Identity Domains Entra IDとの認証連携設定手順 / Identity Domain Federation settings with Entra ID
oracle4engineer
PRO
1
1.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
39
26k
AI_Agent_の作り方_近藤憲児
kenjikondobai
19
4.7k
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
A Tale of Four Properties
chriscoyier
158
23k
Visualization
eitanlees
146
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
Optimizing for Happiness
mojombo
377
70k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
How STYLIGHT went responsive
nonsquared
99
5.4k
Documentation Writing (for coders)
carmenintech
69
4.6k
Code Review Best Practice
trishagee
67
18k
The Language of Interfaces
destraynor
156
24k
Transcript
Let's enjoy crafting interpreters! 〜『インタプリタの作り方』の紹介〜 2024年05月24日(金) SmartHR LT大会 mktakuya /
Takuya Mukohira SmartHR プロダクトエンジニア
5月入社のmktakuyaです
前職を退職後
無職期間1.5ヶ月
やったこと
None
None
(技術的に)やったこと
https://book.impress.co.jp/books/1122101087
『インタプリタの作り方』 著: Robert Nystrom / 訳: 吉川邦夫 出版: インプレス /
2023年9月 ・インタプリタ自作 をやっていく本 ・Loxという著者オリジナル言語 ・手書きパーサ派 (lexerも自作) ・Java / C言語を用いて、 2つのインタプリタを つくる
出典: インタプリタの作り方( Robert Nystrom, 2023: p.14)
2つのインタプリタ
第1のインタプリタ: jlox
・jlox: JavaによるLoxのインタプリタ ・ツリーウォーク型のインタプリタ ・ASTを再帰関数でたどる (まさにツリーをウォーク する!) ・おそい
第2のインタプリタ: clox
・clox: C言語によるLoxのインタプリタ ・バイトコード式の仮想マシン ・Loxのコードをコンパイル し、 バイトコードを生成 →VMで実行する ・はやい
???
ツリーウォーク型インタプリタ: jlox → 1.8以前のCRuby と同じ バイトコード式の仮想マシン: clox → 1.9(YARV)以降のCRubyと同じ
つまり……
ツリーウォーク型インタプリタ: jlox → Matzになれる!!! バイトコード式の仮想マシン: clox → ko1さんになれる!!!
と言っても 過言ではない!!!(過言)
None
所感
・単に、いちプログラマとしての幅が広がった ・言語処理系の知識がざっくり身についた → 用語としては知っていた各解析やバイトコード、 スタックマシン型VMなどをつくることを通して理解。 ・これまで触れなかった言語に触れたいと思うようになった → 言語の設計についてのコラムで、
他の言語を例に出したり、設計アイデアを拝借したり。 LuaやSmalltalk、そしてLISPを触ってみたくなった。
・RubyKaigiの議論を理解 するのに役立った ・パーサ系トーク →「手書きパーサ」「パーサジェネレータ」の比較。 本で手書きパーサを書いたおかげで、 それぞれのメリデメなどをなんとなく理解できる。 ・VM系トーク → LoxのバイトコードはYARVとは違うが基本は一緒。 スタックマシンという意味では一緒なので爆わかり。
・一方で…… ・Rebuild EP153 rui314さん回の話を思い出す。 → ruiさんがCコンパイラをスクラッチで書いた話。 「自作言語を作るのも楽しいけど、既存言語もいい。 既存の言語でセルフホスティングも目指す となると
全部やる(手抜き NG)ので勉強に なる。」(要約) ・これは実際そうだなーと思った。 → 書籍でも自分でも、簡略化のために省いたもの多し。 https://rebuild.fm/153/#t=01:01:45
None
おわりに
・無職期間をやる前に、 → 「普段は絶対やらないようなことやろう」 と決めた。 Webアプリやツール開発は仕事終わりに勝手にやるので。 ・せっかくならCSっぽいことや低レイヤっぽいこと やろう! →
“プログラミング”にちゃんと向き合いたいし、 言語でも作るか、で『インタプリタの作り方』に出会う。
・インタプリタの作り方は、 たぶんSmartHRでの仕事にはあんまり役に立たない…… ・けど、 RubyKaigiでRubyをつくる人たちを見てシビれたように ・『インタプリタの作り方』を読んで Matzやko1さんに近づいたつもりになってみるのもアリ!?
Let's enjoy crafting interpreters!