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
goluaをさわってみる
Search
take_cheeze
February 12, 2019
Programming
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
goluaをさわってみる
take_cheeze
February 12, 2019
More Decks by take_cheeze
See All by take_cheeze
html5everをスクリプト言語から呼ぶ
takecheeze
0
290
mgemのCIを支える諸々
takecheeze
2
580
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.8k
fukuoka.rb 祝 #100!
takecheeze
0
710
dep ensure浅掘り
takecheeze
0
480
LuaJIT as a Ruby backend
takecheeze
1
3.9k
Fukuoka Ruby Award 10th
takecheeze
1
290
コンパイル時計算への招待.pdf
takecheeze
1
1.5k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.4k
Other Decks in Programming
See All in Programming
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.4k
AI Augmentation Techniques with Liberty
ivargrimstad
1
330
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
180
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
150
AmebaブログはKMPから卒業します
kmars0605
0
310
GraphQL の onError と Nullability のこれから
quramy
0
200
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
120
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
130
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
230
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
210
Seven New Principles of Software Engineering
yegor256
0
440
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
433
67k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
320
Designing for humans not robots
tammielis
254
26k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
590
Building Adaptive Systems
keathley
44
3.3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
290
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to build a perfect <img>
jonoalderson
1
6.2k
Making Projects Easy
brettharned
120
6.8k
Transcript
goluaをさわってみる 2019/02/12 Fukuoka.go LT @take-cheeze
goluaとは? - GitHubのAzure下に突如公 開される - GolangによるLua実装 - 対応Luaのバージョンは5.3
Luaとは? - ゲームで高い実績を持つス クリプト言語 - 単体で使う運用よりもその 小ささで埋め込んで使われ ることが多い - mrubyに多大な影響
- Goやってる人だと OpenRestyの lua-nginx-moduleが有名?
Luaの バージョンに ついて - Luaそんな詳しくない - 5.0: レジスタマシン導入 - スクリプト言語実装界隈でそこ
そこ話題に - 5.1 / 5.2 : LuaJIT - ライブラリの追加はあったり - 微妙に非互換があったはず - 5.3: 数値の内部表現に整 数が追加 - 最新安定系
テストを 走らせてみる - ./test/test.shを使う - Lua 5.3がデフォルトのLua として入っていないと動かな い -
自前でビルドするようにして みた
自前で やった方法 - Lua 5.3をビルドする - PATHを上書きする - シェルスクリプト便利 -
あとは通常通り
gluaコマンド - luaコマンドに相当 - /cmd/glua/main.goがエン トリポイント - *lua.Stateを作る - std.Openで標準ライブラリ
を読み込む - フラグはそんなに対応して ない(デバッグ系だけ)
基本的なところ - Goのランタイムに薄くLuaっ ぽいものを生やしてる - APIは完全に別物 - っぽさだけはある - 関数の取扱が楽だったり
- Cを今更書くとつらいので
メモリ管理 - 基本的にGoのランタイムに 乗っかる - 詳しくは/lua/value.go - 例: `type String
string` - Luaの文字列はimmutable - RubyのStringだと難しい
VMの実装 - Goのtype便利 - 命令型のint32に低コストでメ ソッドを生やせる - Cの汚いマクロとおさらば - VMは関数テーブルでディ
スパッチする - fetchで対応する関数を取得 - executeで終端まで実行 - Direct Threaded Codeみたいな ことはさすがにできないらしい
コンパイラの 実体 - golua自体にLuaのコンパリ ラはない - 実体はluac - luacが生成するVMの実行 表現をgoluaは解釈
- インストールされてるLuaの バージョンが5.3系じゃない と...
luaのC APIを goluaで 実装できるか? - 完全にはできない - 詳しくはcgoのPassing Pointers -
一度Goを通せばいい? - Go References to C - 関数ポインタを呼べなくもない?
CのAPIが 必要なところ? - 過去のCで実装された部分 を利用するため - GCを考えると難しい
APIが 難しいって? - This api is too difficult to use.
This is Golang not c! - Cより一応マシ? - interface{}による振り分け がstate.Pushではある
テスト結果を 見るのが難しい - 整数の割り算のバグを見つ けた - テストログを短くする必要っ てあんまりないと思う... - パイプでgrepとかやめて...
os.executeを 実装してみた - os/execで実装してみた - テスト結果がうまく見れなく てくじけた... - UNIXではたぶんちゃんと動 くかな...?
- Luaでおなじみのスタックを いじるAPI
まとめ - goluaはGoのランタイムに 薄いLuaをかぶせてる - Goのランタイム優秀 - Lua 5.3とのバイナリレベル での互換性が担保されてい
る
ありがとうございました!