Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Search
Fukui Yusei
July 28, 2025
0
82
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Fukui Yusei
July 28, 2025
Tweet
Share
More Decks by Fukui Yusei
See All by Fukui Yusei
研修で出会った 「自分の言葉でまとめる」勉強法
fyusei
0
11
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Faster Mobile Websites
deanohume
310
31k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Docker and Python
trallard
46
3.7k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Why Our Code Smells
bkeepers
PRO
340
57k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
What's in a price? How to price your products and services
michaelherold
246
12k
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