原来的扩展实验需要改动lua++生成的cpp源码,每次手动去改,太恶心了,
于是尝试用脚本去替换,然后把脚本放入到了makefile 中:
- sed -i "s/\(tolua_pushcppstring.*\)(const char\*)\(.*\)/\1\2/g" $(lua_prefix).cpp
- perl -e "open FILE, '$(lua_prefix).cpp'; undef\$$/; \$$d = ; \$$d =~ s/(TOLUA_API.*?(;|{.*?}))/extern \"C\" {\1}/gs; print \$$d" > .tt.cpp
- mv .tt.cpp $(lua_prefix).cpp
写这几条脚本花了不少时间,周末的时间都花在学习正则表达式上面去了;
sed 替换 tolua_pushcppstring 那句还好;
perl 那句就有点意思了;那句意思是把 TOLUA_API 导出函数前后夹上 "extern "C"{...}"
btw:前段时间随手翻了翻《程序员修炼之道:从小工到专家》这本书,看到
代码自动生成中用到的 perl 根据 DSL 同时生成 c++,java++,php等等语言的时候,引起阵阵共鸣啊:
在工作项目中,我们的协议采用 thrift 协议,生成原始的 cpp 代码后,
还需要把协议包装到我们自身的svr通信协议中去(我们的协议有个19个
字节固定长度的包头,里面有type,length,status,magic等等字段),
于是就写了些代码自动完成这一包装过程,虽然比较山寨,但是最终是完成了所需的功能,
这一包装过程重复而复杂(里面非常多的模版和typedef以及宏,用的人很难看懂里面的代码过程),
幸好,用起来倒是非常简单;
现在这一套件和makefile紧密的整合在一起了,生成协议就几步:
1,写 thrift 文件
2,根据自己需要设置 makefile 中lib生成名称
3,make,哗啦啦,出现一堆自动生成的 .h, .cpp 文件(大概十多个)
4,应用,应用的时候,只需要关心 thrift 中定义的结构即可,并不需要关心3中生成的一堆代码;
现在我们的项目中的svr基本都已经使用这一工具,极大的提高了工作效率,
也摒弃了以前手动写协议中出现的大量bug,也不需要再调试协议了,
开发人员只需要关心自己的业务逻辑就可以了;
之所以在这里说这些,主要是觉得那个工具里面用的代码自动生成太山寨了,
用的普通的 grep,tail,cat;
而《程序员修炼之道:从小工到专家》 中那个perl工具非常之简单;
准备学习下 perl,掌握perl,掌握正则,才能谈的上从小工到专家吧,否则永远徘徊在小工行列;
先买两本书,一本是perl的,一本是正则表达式的;
btw:很少买书,买的书都是经典的,经典的书非买不可;案头的经典书籍每次随手翻翻都能有所收获;
阅读(2063) | 评论(0) | 转发(0) |