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
goluaをさわってみる
Search
take_cheeze
February 12, 2019
Programming
0
340
goluaをさわってみる
take_cheeze
February 12, 2019
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
html5everをスクリプト言語から呼ぶ
takecheeze
0
240
mgemのCIを支える諸々
takecheeze
2
550
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.6k
fukuoka.rb 祝 #100!
takecheeze
0
630
dep ensure浅掘り
takecheeze
0
420
LuaJIT as a Ruby backend
takecheeze
1
3.6k
Fukuoka Ruby Award 10th
takecheeze
1
260
コンパイル時計算への招待.pdf
takecheeze
1
1.4k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.3k
Other Decks in Programming
See All in Programming
AIで開発生産性を上げる個人とチームの取り組み
taniigo
0
130
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
770
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
910
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
180
明日から始めるリファクタリング
ryounasso
0
110
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
1k
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
680
Le côté obscur des IA génératives
pascallemerrer
0
120
WebエンジニアがSwiftをブラウザで動かすプレイグラウンドを作ってみた
ohmori_yusuke
0
170
Catch Up: Go Style Guide Update
andpad
0
170
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
600
クラシルを支える技術と組織
rakutek
0
190
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
890
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
YesSQL, Process and Tooling at Scale
rocio
173
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
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とのバイナリレベル での互換性が担保されてい
る
ありがとうございました!