baidu / sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于sofa::pbrpc::shared_ptr 和std::shared_ptr的问题

kcwl opened this issue · comments

commented

我很疑惑:我看代码里面有很多组件库都是自己写的,并没有用到标准里面的东西,这样写在哪方面有优势?是性能更好,更适合此版本的所处的环境,还是..........更方便迁移?

我解释一下,有这几方面原因:

  1. 有些组件是c++11才支持的,譬如std::shared_ptr和atomic等,但是当时百度尚在使用gcc 3.4.5(老掉牙的版本,此处省略一万字),没法支持c++11。实际上如果能够用c++11的话,问题就简单多了,很多东西都不用自己写了,包括:智能指针、原子操作和原子计数器、Closure(直接用lambda)等。
  2. 为了让用户不需要依赖boost头文件和库。如果直接使用boost::shared_ptr,那么给用户提供的头文件就需要依赖<boost/smart_ptr.hpp>,用户就必须依赖boost。于是采取了一些手段,其中就包括:将boost::shared_ptr抽出来换个namespace作为自己的头文件。当然,去掉boost依赖是否利大于弊,这个还需商榷。

综合来说,不是性能原因,而是环境问题。
谢谢。

commented

@qinzuoyan 好哒,受教

@qinzuoyan sofa pbrpc是否还有必要坚持兼容老版本gcc?是否可以在后续就全面支持c++11?很多c++开源项目都已经全面拥抱c++11了,是否sofa pbrpc也跟进一下潮流?

我觉得可以啊,这样如何:

  1. 老版本的开一个分支出去
  2. master分支升级为支持c++11的,这样也可以移掉很多代码和依赖,譬如Closure、shared_ptr等

赞!这样很好啊