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
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Fukui Yusei
July 28, 2025
0
94
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Fukui Yusei
July 28, 2025
Tweet
Share
More Decks by Fukui Yusei
See All by Fukui Yusei
研修で出会った 「自分の言葉でまとめる」勉強法
fyusei
0
26
Featured
See All Featured
Marketing to machines
jonoalderson
1
4.7k
Ruling the World: When Life Gets Gamed
codingconduct
0
150
Believing is Seeing
oripsolob
1
58
Faster Mobile Websites
deanohume
310
31k
Code Reviewing Like a Champion
maltzj
527
40k
Unsuck your backbone
ammeep
671
58k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
750
Ethics towards AI in product and experience design
skipperchong
2
200
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
77
How to Talk to Developers About Accessibility
jct
2
140
Transcript
Go言語で作ったインタプリタに goroutineをぶちこんでみた 👊
所属:石川高専 電子情報工学科 趣味:バンド、料理 GitHub: f-yusei 興味:Go言語,TiDB Kanazawa.goの運営やってます! LT初めてです!緊張してます ゆーせい
この本知ってますか? 引用:Go 言語でつくるインタプリタ https://45kaku.com/itpassport_text_38-01/#toc4
背景 「 Go 言 語 で つ く る イ
ン タ プ リ タ 」 を 読 ん で Monkey言語にfor文を拡張したりして遊んでいた 内定先にこのMonkey言語を拡張してgoroutineを 使えるようにした人がいたらしい、 、 面白そう!自分もやりたい!!
インタプリタって何? 引用:プログラム言語( 高水準/ 低水準・コンパイラ/ インタプリタ) とは? https://45kaku.com/itpassport_text_38-01/#toc4 PythonやJavaScriptで採用されている
やりたいこと goroutineやchannelを追加したい!
moキーワードを認識できるようにする 字句解析 1 mo fn()という文法を解析できるようにする 構文解析 2 解析した結果の木構造のデータを正しく 評価できるようにする 3
goroutineの追加手順
字句解析 Token Expression mo fn() 抽象化 Mo構文とは何かを定義!
構文解析 MOトークンを検知! Mo構文のインスタンスを作り 後に続く関数を Moインスタンスに紐づける parseMoStatement() を呼び出し!
評価 並列で同じメモリにある変数を 参照しないように ルーチンごとに別の環境を設定
評価 並列で同じメモリにある変数を 参照しないように ルーチンごとに別の環境を設定 Goのモットーにもある 「メモリの共有によって通信し てはいけない」 という考えを踏襲
評価 mo fn() の 関 数 部 分 の 評
価 を goroutineの力を借りて非同期 で実行 Goで作っているインタプリタ だからこそgoの機能を活用し て簡単に並列処理できる!
使ってみた fetchPost:50ms fetchPostLikes:50ms fetchPostComments:100ms 非同期処理ができていると 50ms + 100ms= 150ms 150ms程度の時間で実行できるはず!
実行結果 152msで実行された 🎉🎉
まとめ インタプリタを拡張することで、goroutineや channelに対する知識が深まった Goの考え方に触れるいい機会 これからもmonkeyを拡張していきたい!
まとめ あなたもGo言語の肩に立って 自作言語デビューしましょう!
ありがとうございました! 感想など聞かせていただけると嬉しいです!! THANK YOU