Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519237
  • 博文数量: 78
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-15 20:22
个人简介

技术中沉思的时候最快乐,问题得到完美解决的时候最有成就感!

文章分类

全部博文(78)

文章存档

2013年(39)

2012年(37)

2011年(2)

分类: LINUX

2012-05-14 13:01:33

原来的扩展实验需要改动lua++生成的cpp源码,每次手动去改,太恶心了,
于是尝试用脚本去替换,然后把脚本放入到了makefile 中:

点击(此处)折叠或打开

  1. sed -i "s/\(tolua_pushcppstring.*\)(const char\*)\(.*\)/\1\2/g" $(lua_prefix).cpp
  2. perl -e "open FILE, '$(lua_prefix).cpp'; undef\$$/; \$$d = ; \$$d =~ s/(TOLUA_API.*?(;|{.*?}))/extern \"C\" {\1}/gs; print \$$d" > .tt.cpp
  3. 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) |
给主人留下些什么吧!~~