Slide 1

Slide 1 text

LuaJIT a Just-in-Time compiler for the language Lua

Slide 2

Slide 2 text

誰在用 Lua World of Warcraft Angry Birds Civilization 5 Homeworld 2 ... http://en.wikipedia.org/wiki/Category:Lua-scripted_video_games ...AND YOU!(possibly)

Slide 3

Slide 3 text

認識 Lua 語法簡單、靈活 速度快 體積小 易延展(Lua/C API)  =>Extensible & Embeddable 『通常不獨立使用』

Slide 4

Slide 4 text

Lua 效能

Slide 5

Slide 5 text

Lua 效能

Slide 6

Slide 6 text

LuaJIT http://luajit.org Michael (Mike) Pall 2005~ LuaJIT 1.x (stable 1.1.6) 2009~ LuaJIT 2.0-beta releases Now =>LuaJIT 2.0-beta6 (google for LuaJIT Roadmap 2011)

Slide 7

Slide 7 text

Just-in-Time Compiler? 即時編譯器 Source code => bytecode => machine code Java Hotspot C# .Net Javascript V8/Trace(Jaeger) Monkey Python Pypy ...還有很多

Slide 8

Slide 8 text

JIT 效能

Slide 9

Slide 9 text

速度 & 程式碼量

Slide 10

Slide 10 text

LuaJIT 2.0 超級快 只算 interpreter 也比原本快 2x-4x Lua 5.1 語法完全相同 丟進去就可以用(drop-in replacement) Beta 已經很穩定 Foreign Function Interface(beta6) 現在只有 x86/64 版本

Slide 11

Slide 11 text

LuaJIT in Games? The Settlers 7 搶在上市前實裝 LuaJIT2-beta 個人測試: Civilization 5 只能用 LuaJIT1 (可能是因為 bytecode 不相容) Mike 本人透露,還有很多不能講...

Slide 12

Slide 12 text

LuaJIT 注意事項 Lua table 盡量用,不用怕 overhead 避免大量的 closure(目前) 避免只跑幾次的 inner loop 避免 global object for i = 1, 100000000 do  local t = {'a','b','c'}  for j = 1, 3 do t[j] = .. end End --p.s.通常這可以被自動 unroll,但若其 loop 次數是由變數決定就很難講

Slide 13

Slide 13 text

LuaJIT 注意事項 避免無謂的暫存物件 多用 -jv option 查看執行效果 Bytecode 不相容於 Lua 5.1 不打算積極跟上 Lua 5.2

Slide 14

Slide 14 text

LuaJIT 近期重點 Qualcomm 贊助 ARM Port! Foreign Function Interface! local ffi = require("ffi") ffi.cdef[[ typedef struct { float x,y,z; } SVertex; int MessageBoxA(void*,char const*,char const*,int); ]] ffi.C.MessageBoxA(nil, "Hello world!", "Test", 0) local img = ffi.new("SVertex[?]", 100) img[0].x = 123

Slide 15

Slide 15 text

What's to come? 2011 年內:  LuaJIT 2.0 正式版與 2.1 測試版  ARM port of LuaJIT 2.0   About 2.1:  New Garbage Collector  FFI C-preprocessor (?)  

Slide 16

Slide 16 text

What's to come? 更遠程:LuaJIT FFI to C++ (!?) Binding 再也不用額外寫,運算可以幾乎 都寫在 Lua 裡... ...Full Lua 3D engines ? ...Full Lua Triple-A Titles ?  What's in the next level ?

Slide 17

Slide 17 text

My 2 Cents: 沒有天天過年的啦 Lua nature1:沒有統一穩定的電池 Lua nature2:大概永遠不適合大團隊開發 因為太簡單,大家自成一套 =>  結果反而不穩定、難用? x86/64、ARM 以外的平台大概有得等

Slide 18

Slide 18 text

Demo Time Game of Life benchmark:  純邏輯速度比較 C/C++  加上繪圖速度比較 =>   GL primitive、Vertex Array、   VBO、PBO  繪圖加速情況下把邏輯加速關掉 [1] https://github.com/archilifelin/mysandbox/blob/master/lua/lifegame_ffi_sdl_gl.lua [2] https://github.com/archilifelin/mysandbox/tree/master/cpp/lifegame_sdl

Slide 19

Slide 19 text

Lua 框架 CoronaSDK Scripting-Layer for Android (SL4A) Gamekit (based on Ogre) ShiVa Engine Love2D ...and more

Slide 20

Slide 20 text

Love2D http://love2d.org OpenGL 加速的輕量 2D遊戲框架 Box2D integration TrueType Font(no unicode yet) Pure Lua function love.draw() love.graphics.print('Hello World!', 400, 300) end

Slide 21

Slide 21 text

Q & A 資料來源 Lua mailing list http://luajit.org http://love2d.org http://en.wikipedia.org http://shootout.alioth.debian.org [email protected] http://igdshare.org