gopher-lua
TRANSCRIPT
というのは嘘で(gopher-jsも面白いけど)
http://qiita.com/tenntenn/items/4b9587120176c2d4b454
gopher-luaとは
● 完全にGoで書かれたLuaの実装
○ 作者のブログ
○ https://github.com/yuin/gopher-lua
● GoからLuaが実行できる
● gopher-lua/ast を使うとASTも使える
● goyaccが使われてる
Lua
● C言語をホストとして、組み込まれる目的で使わ
れるスクリプト言語
● 動作が早い、移植しやすい
● 拡張言語として使われる
○ Redis, nginx, ....
● ゲームエンジン+Lua○ cocos2d-x, Playground, ...
私とLua
● Luaを使って開発をしている
● Luaの開発環境をもっとよりよくしたい
○ デバッガ
■ https://github.com/tenntenn/lupe
○ lint
■ https://github.com/tenntenn/lualin
実行
func Double(L *lua.LState) int { lv := L.ToInt(1) L.Push(lua.LNumber(lv * 2)) return 1}
func main() { L := lua.NewState() defer L.Close() L.SetGlobal("double", L.NewFunction(Double)) }
1番目の引数をintとして受け取る
戻り値をpushする
グローバル変数にセット
AST
chunk, err := parse.Parse(f, fn)if err := nil {panic(err)}for _, s := range chunk { if fs, ok := s.(*ast.FuncDefStmt); ok { if fe, ok := fs.Name.Func.(*ast.IdentExpr); ok { fmt.Print(fe.Value) } }}
AST([]ast.Stmt)を取得
関数名を取得
関数宣言?
識別子
Luaを使って設定ファイルを書く
-- config.lualocal config = {}for i = 0, 4 do table.insert(config, { host = “localhost”, port = 8080 + i, })endreturn config
もちろんforも使える