[ Content | Sidebar ]

Posts tagged python

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?

Python简介

给同事做了一个小分享,主要是简单介绍一下python这门语言,ppt贴上,期待python能够成为主流!!!

twisted保持http长连

twisted实在是太方便了~

#下面是示例代码,未经测试。。
from twisted.internet import reactor
from twisted.web import server, resource
 
clients = []
 
class Simple(resource.Resource):
    isLeaf = True
    def render_GET(self, req):
        #保存request
        clients.append(req)
        #客户端主动终止时删除
        req.notifyFinish().addErrback(lambda _:clients.remove(req))
        #保持长连
        return server.NOT_DONE_YET
 
#之后可以异步的用类似下面的方法回写数据,关闭连接
#for req in clients:
#    req.write('xxx')
#    req.finish()
#clients = []
 
site = server.Site(Simple())
reactor.listenTCP(8888, site)
reactor.run()
Copy Code 

中间调试的时候有个问题,就是用FF同时发起两个长连请求同一个URL,第一请求返回前第二个请求会被阻塞,一开始还以为是twisted的问题,但后来试了下同时开FF和chrome没有问题。

———–
vim->email->wordpress

python产生GMT格式日期时间

#缓存一天
exp = datetime.timedelta(seconds=86400)
now = datetime.datetime.utcnow()
req.setHeader('Cache-Control', 'max-age=86400')
req.setHeader('Expires', (now + exp).strftime('%a, %d %b %Y %H:%M:%S GMT'))
Copy Code 

———–
post by Email~

PPJ回忆录

个人以为:学一门脚本很容易,但是学几门就是一个痛苦的事,因为我经常把他们搞混。。

于是我下决心写一个能够帮我理清楚的文档,我命之为《PPJ回忆录》,从周5写到今天,精疲力尽,剩下OO和正则部分没写,我决定先歇会~

毫不客气的说,对于同时学里面任意两门语言的同学,这个文档都会对你有帮助。

———–
post by gmail~