Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Search
Fukui Yusei
July 28, 2025
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語で作ったインタプリタにgoroutineをぶちこんでみた👊
Fukui Yusei
July 28, 2025
More Decks by Fukui Yusei
See All by Fukui Yusei
研修で出会った 「自分の言葉でまとめる」勉強法
fyusei
0
51
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.8k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
Building the Perfect Custom Keyboard
takai
2
910
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
GitHub's CSS Performance
jonrohan
1033
470k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
800
Are puppies a ranking factor?
jonoalderson
2
4.1k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
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