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
1.2k
『インタプリタの作り方』の紹介 / 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.4k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
940
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
2.5k
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
2.8k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
360
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.4k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1.1k
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
350
HMCC2019 Emoji SANPO
mktakuya
0
3.3k
Other Decks in Technology
See All in Technology
Amazon Bedrock AgentCoreのフロントエンドを探す旅 (Next.js編)
kmiya84377
1
140
ユーザー課題を愛し抜く――AI時代のPdM価値
kakehashi
PRO
1
120
相互運用可能な学修歴クレデンシャルに向けた標準技術と国際動向
fujie
0
250
LLMで構造化出力の成功率をグンと上げる方法
keisuketakiguchi
0
830
AWS DDoS攻撃防御の最前線
ryutakondo
1
160
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
3
1.1k
マルチプロダクト×マルチテナントを支えるモジュラモノリスを中心としたアソビューのアーキテクチャ
disc99
1
540
UDDのススメ - 拡張版 -
maguroalternative
1
550
LLMをツールからプラットフォームへ〜Ai Workforceの戦略〜 #BetAIDay
layerx
PRO
1
980
Claude Codeは仕様駆動の夢を見ない
gotalab555
23
6.6k
ファッションコーディネートアプリ「WEAR」における、Vertex AI Vector Searchを利用したレコメンド機能の開発・運用で得られたノウハウの紹介
zozotech
PRO
0
320
金融サービスにおける高速な価値提供とAIの役割 #BetAIDay
layerx
PRO
1
830
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
524
40k
Raft: Consensus for Rubyists
vanstee
140
7.1k
A designer walks into a library…
pauljervisheath
207
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Cost Of JavaScript in 2023
addyosmani
51
8.8k
Embracing the Ebb and Flow
colly
86
4.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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!