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
390
0
Share
goluaをさわってみる
take_cheeze
February 12, 2019
More Decks by take_cheeze
See All by take_cheeze
html5everをスクリプト言語から呼ぶ
takecheeze
0
260
mgemのCIを支える諸々
takecheeze
2
570
Go_2のドラフトを読む__エラー編_.pdf
takecheeze
0
1.7k
fukuoka.rb 祝 #100!
takecheeze
0
680
dep ensure浅掘り
takecheeze
0
460
LuaJIT as a Ruby backend
takecheeze
1
3.8k
Fukuoka Ruby Award 10th
takecheeze
1
280
コンパイル時計算への招待.pdf
takecheeze
1
1.4k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.4k
Other Decks in Programming
See All in Programming
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
4.7k
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
390
New "Type" system on PicoRuby
pocke
1
390
誰も頼んでない機能を出荷した話
zekutax
0
150
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
320
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
100
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
180
OSもどきOS
arkw
0
350
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
240
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
360
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
140
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
110
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How STYLIGHT went responsive
nonsquared
100
6.1k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
sira's awesome portfolio website redesign presentation
elsirapls
0
270
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
950
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
830
Believing is Seeing
oripsolob
1
140
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とのバイナリレベル での互換性が担保されてい
る
ありがとうございました!