[ Content | Sidebar ]

Archives for 六月, 2011

Hello lua

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;
}
Copy Code 

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
Copy Code 

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?

three20的TTURLRequest的两点

1. 即使发异步请求,请求也不是并发的,而是通过TTURLRequestQueue排队顺序完成。

2. view在滚动,或者使用特效切换view时会暂停掉TTURLRequestQueue

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  //开始拖拽滚屏的时候暂停请求
  //这揍是为啥拖动的时候TTImageView都不会加载的原因
  [TTURLRequestQueue mainQueue].suspended = YES;
 
  [_controller didBeginDragging];
 
  if ([scrollView isKindOfClass:[TTTableView class]]) {
      TTTableView* tableView = (TTTableView*)scrollView;
      tableView.highlightedLabel.highlightedNode = nil;
      tableView.highlightedLabel = nil;
    }
}
Copy Code 

一个未成形的富文本编辑器

作为一个IOS开发者,我决定贡献一点html代码。。。

最近打算用html+js做一个简单的富文本编辑器给IOS和andriod客户端用,不用任何第三方的框架,简简单单,一个纯洁的编辑器。
写的差不多有点样子,便拿到模拟器上试试,结果悲剧了:IOS上的safari是个太监,根本不支持contentEditable这个东西。
把写半截的代码贡献出来,safari和chrome可以用,对想了解富文本编辑器的同学绝对有帮助。
http://bluehua.org/demo/mobile_editor.html


———–
vim->email->wordpress