如何写一个公共库

标签:公共库    2265人阅读 评论(1)
分类:

把经常用的功能或函数封装成一个独立模块,作为公共库供其他人共享,是个很好的事情!

 

但注意几点(也许不全,再补充)


1-作者必须是第一个使用者
  作者自己一定是第一个用的,最好正在线系统上7x24运行过, 把常见的坑自己先趟一遍,别先留给别人;

 

2-让使用者尽可能简单调用
  最好只提供一个.h, 一个.so, 一个example.c, 如果功能很复杂的库,再加一份说明文档,
  实在没办法,需要额外依赖第三方库的,最好将其作为.a封装在.so内部,尽量不要让使用者再安装、链接第三方库;

 

3-向后兼容
  一个公共库的功能通常是不断膨胀的,
  纯新增加的功能或接口还好,
  如果对旧接口进行升级改进,怎么在发布新版时,同时兼容旧版,是必须考虑的问题,
  我犯过如下错误:
      第一版: fun(int a);
      第二版需要加参数: fun_v2(int a, int b);
      第三版又需要加参数: fun_v3(int a, int b, int c);
  由fun升级到fun_v2,确实是没办法的事情,否则新加的功能无法使用,
  但还有后续的fun_v3就不应该了,在fun_v2阶段,就应该考虑到一切后续的升级兼容性问题, 
  可参考Linux接口setsockopt(2)。

 

4-有足够详细的日志,要能区分日志等级
  运行时严禁刷屏,初始化阶段时可打印一些重要信息,
  正常运行时,只输出严重错误日志;
  遇到问题切换到DEBUG级别时,能输出足够详细的日志,帮助使用者确定大致问题原因,
  否则,作者就要不停接电话,聊QQ,或者去现场,最后发现可能就是个配置文件写的不对。

 

5-防御式or契约式
  作为一个公共库,还是要用防御式编程,不要相信任何人,
  哪怕牺牲点性能,输入参数一定要检查合法性,否则整天coredump可受不了。
  即便某些情况下,需要追求极致性能,也要用宏定义控制开关, 仅必要时开启。


查看评论
1楼 刘庆云 2017-06-12 15:36:24 [回复]
公共库的接口设计应该加一个评审环节,广泛收集意见。

发表评论
  • 评论内容:
      
首页
团队介绍
发展历史
组织结构
MESA大事记
新闻中心
通知
组内动态
科研成果
专利
论文
项目
获奖
软著
人才培养
MESA毕业生
MESA在读生
MESA员工
招贤纳士
走进MESA
学长分享
招聘通知
招生宣传
知识库
文章
地址:北京市朝阳区华严北里甲22号楼五层 | 邮编:100029
邮箱:nelist@iie.ac.cn
京ICP备15019404号-1