lua将作为下一门新语言学习。如果按照一年学习一门新语言的标准来说,我算超勤快的了。lua被发明的目的便是嵌入C或C++程序,给程序带来编译语言不及的灵活性。
google了一下lua,发现大部分都是做游戏开发的C++程序员的文章,看来不只是魔兽世界在用。
lua做嵌入的优势:
1 . 小,整个解释器不到200K
实际测试:
编译一个空的IOS项目 205K
嵌入Lua后的IOS项目 414K
2 . 运行速度快
实际测试:
做了三个测试程序,分别内嵌lua(静态链接),javascript(动态链接JavascriptCore,链接库6.4M),python(动态链接python2.6,链接库2.0M)
三个程序都做相同的事情,初始化一个脚本运行环境,打印一个字符串,销毁
比如lua,其他JS和python类似,只不过调用的api不一样:
static int lua_printf(lua_State *L) { const char *cmsg = luaL_checkstring(L, 1); printf("%s\n", cmsg); return 0; } static void eval_lua(NSString *code) { lua_State *L; L = lua_open(); luaopen_base(L); lua_register(L, "printf", lua_printf); luaL_loadstring(L, [code cStringUsingEncoding:NSUTF8StringEncoding]); lua_pcall(L, 0, LUA_MULTRET, 0); lua_close(L); } int main (int argc, const char * argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate]; eval_lua(@"printf(\"你好 lua\")"); NSTimeInterval duration = [NSDate timeIntervalSinceReferenceDate] - start; printf("total time:%.5f\n", duration); [pool release]; return 0; }
PK结果
$ ls -lh *_test -rwxr-xr-x 1 hualu staff 10K 6 23 20:32 js_test -rwxr-xr-x 1 hualu staff 136K 6 23 20:37 lua_test -rwxr-xr-x 1 hualu staff 9.4K 6 23 20:32 py_test $ ./lua_test 你好 lua total time:0.00018 $ ./js_test 你好 Javascript total time:0.00557 $ ./py_test 你好 Python total time:0.01311
3. lua支持多线程,每个线程可以配置独立的解释器(没有亲测,道听途说)
4. 语法简单,其实这个可以算优点,比JS要简单易懂的多。。。
lua这么小巧的身躯太适合嵌入手机软件了。可以动态的从server上加载一些lua脚本来运行,免去劳烦用户更新软件的烦恼~.就目前所知,愤怒的小鸟是一个混合编程的好例子,关卡的设置均由lua控制。
其实已经有geek为前面三门语言做了Objc的Bridge,项目分别是:
对于lua有wax
对于js有jscocoa
对于python有PyObjc
而且他们的目的已经不是简单的嵌入Objectivc了,而是代替objc作为MAC或IOS应用的开发语言。。。当然我并不是很赞同这种偷懒的方法,脚本要适度使用。
最后,看的一些资料:
Lua 5.1 参考手册
xcode中添加静态链接库
lua和python谁更适用于嵌入MMORPG?