×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
goluaをさわってみる 2019/02/12 Fukuoka.go LT @take-cheeze
Slide 2
Slide 2 text
goluaとは? - GitHubのAzure下に突如公 開される - GolangによるLua実装 - 対応Luaのバージョンは5.3
Slide 3
Slide 3 text
Luaとは? - ゲームで高い実績を持つス クリプト言語 - 単体で使う運用よりもその 小ささで埋め込んで使われ ることが多い - mrubyに多大な影響 - Goやってる人だと OpenRestyの lua-nginx-moduleが有名?
Slide 4
Slide 4 text
Luaの バージョンに ついて - Luaそんな詳しくない - 5.0: レジスタマシン導入 - スクリプト言語実装界隈でそこ そこ話題に - 5.1 / 5.2 : LuaJIT - ライブラリの追加はあったり - 微妙に非互換があったはず - 5.3: 数値の内部表現に整 数が追加 - 最新安定系
Slide 5
Slide 5 text
テストを 走らせてみる - ./test/test.shを使う - Lua 5.3がデフォルトのLua として入っていないと動かな い - 自前でビルドするようにして みた
Slide 6
Slide 6 text
自前で やった方法 - Lua 5.3をビルドする - PATHを上書きする - シェルスクリプト便利 - あとは通常通り
Slide 7
Slide 7 text
gluaコマンド - luaコマンドに相当 - /cmd/glua/main.goがエン トリポイント - *lua.Stateを作る - std.Openで標準ライブラリ を読み込む - フラグはそんなに対応して ない(デバッグ系だけ)
Slide 8
Slide 8 text
基本的なところ - Goのランタイムに薄くLuaっ ぽいものを生やしてる - APIは完全に別物 - っぽさだけはある - 関数の取扱が楽だったり - Cを今更書くとつらいので
Slide 9
Slide 9 text
メモリ管理 - 基本的にGoのランタイムに 乗っかる - 詳しくは/lua/value.go - 例: `type String string` - Luaの文字列はimmutable - RubyのStringだと難しい
Slide 10
Slide 10 text
VMの実装 - Goのtype便利 - 命令型のint32に低コストでメ ソッドを生やせる - Cの汚いマクロとおさらば - VMは関数テーブルでディ スパッチする - fetchで対応する関数を取得 - executeで終端まで実行 - Direct Threaded Codeみたいな ことはさすがにできないらしい
Slide 11
Slide 11 text
コンパイラの 実体 - golua自体にLuaのコンパリ ラはない - 実体はluac - luacが生成するVMの実行 表現をgoluaは解釈 - インストールされてるLuaの バージョンが5.3系じゃない と...
Slide 12
Slide 12 text
luaのC APIを goluaで 実装できるか? - 完全にはできない - 詳しくはcgoのPassing Pointers - 一度Goを通せばいい? - Go References to C - 関数ポインタを呼べなくもない?
Slide 13
Slide 13 text
CのAPIが 必要なところ? - 過去のCで実装された部分 を利用するため - GCを考えると難しい
Slide 14
Slide 14 text
APIが 難しいって? - This api is too difficult to use. This is Golang not c! - Cより一応マシ? - interface{}による振り分け がstate.Pushではある
Slide 15
Slide 15 text
テスト結果を 見るのが難しい - 整数の割り算のバグを見つ けた - テストログを短くする必要っ てあんまりないと思う... - パイプでgrepとかやめて...
Slide 16
Slide 16 text
os.executeを 実装してみた - os/execで実装してみた - テスト結果がうまく見れなく てくじけた... - UNIXではたぶんちゃんと動 くかな...? - Luaでおなじみのスタックを いじるAPI
Slide 17
Slide 17 text
まとめ - goluaはGoのランタイムに 薄いLuaをかぶせてる - Goのランタイム優秀 - Lua 5.3とのバイナリレベル での互換性が担保されてい る
Slide 18
Slide 18 text
ありがとうございました!