Your SlideShare is downloading. ×
gopher-lua
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

gopher-lua

186
views

Published on

gopher-lua

gopher-lua

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
186
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GoでOSXのアプリを 書く 2015/03/11(水) @Gonosy.go#11
  • 2. というのは嘘で (gopher-jsも面白いけど) http://qiita.com/tenntenn/items/4b9587120176c2d4b454
  • 3. gopher-luaを 使ってみた 2015/03/11(水) @Gonosy.go#11
  • 4. 自己紹介 上田拓也 KLab株式会社 仕事: Luaと戦う仕事 趣味: Go言語, JS, Lua twitter : @tenntenn
  • 5. gopher-luaってなんなの?
  • 6. gopher-luaとは ● 完全にGoで書かれたLuaの実装 ○ 作者のブログ ○ https://github.com/yuin/gopher-lua ● GoからLuaが実行できる ● gopher-lua/ast を使うとASTも使える ● goyaccが使われてる
  • 7. Luaってなんなの?
  • 8. Lua ● C言語をホストとして、組み込まれる目的で使わ れるスクリプト言語 ● 動作が早い、移植しやすい ● 拡張言語として使われる ○ Redis, nginx, .... ● ゲームエンジン+Lua ○ cocos2d-x, Playground, ...
  • 9. 私とLua ● Luaを使って開発をしている ● Luaの開発環境をもっとよりよくしたい ○ デバッガ ■ https://github.com/tenntenn/lupe ○ lint ■ https://github.com/tenntenn/lualin
  • 10. gopher-luaの使い方
  • 11. 実行 L := lua.NewState() defer L.Close() err := L.DoString(`print("hello")`) if err != nil { panic(err) }
  • 12. 実行 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する グローバル変数にセット
  • 13. 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)を取得 関数名を取得 関数宣言? 識別子
  • 14. Go+Luaの利点
  • 15. Luaを使って拡張できる ● ユーザスクリプト ○ Redisやnginxなど用途 ● ゲームエンジン ○ コストの高いコアな処理はGoに任せる ○ ゲーム部分はLuaで柔軟に書く
  • 16. Luaを使って設定ファイルを書く -- config.lua return { host = “localhost”, port = 8080, }
  • 17. Luaを使って設定ファイルを書く -- config.lua local config = {} for i = 0, 4 do table.insert(config, { host = “localhost”, port = 8080 + i, }) end return config もちろんforも使える
  • 18. Luaのソースファイルを解析 ● ASTが取れる ● Cで書きたくない ● LuaだとLua自体に親和性があってよいが ○ コマンドラインの処理やファイルの処理が面倒 ○ 正規表現?がいまいち
  • 19. luaのlintを作った
  • 20. lualin ● luaのlint ● 機能 ○ 変数名や関数名のチェック ○ グローバル変数の有無 ■ local忘れるとグローバル変数になる ○ 拡張可能なルール
  • 21. 実行例
  • 22. 今後の展望 ● luaでルールを増やせるようにする ● ASTだけではできないことに対応 ○ インデント ○ アンチパターンの検出
  • 23. まとめ ● gopher-luaの紹介 ● lualinの紹介