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
Fukui Yusei
July 28, 2025
0
71
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Fukui Yusei
July 28, 2025
Tweet
Share
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
GitHub's CSS Performance
jonrohan
1032
460k
Side Projects
sachag
455
43k
Thoughts on Productivity
jonyablonski
70
4.8k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Become a Pro
speakerdeck
PRO
29
5.5k
Done Done
chrislema
185
16k
4 Signs Your Business is Dying
shpigford
185
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
3k
The Language of Interfaces
destraynor
162
25k
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