我们做分布式存储的,... - @黄岩gg的微博 - 微博


我们做分布式存储的,我们数据面选择了C,没有选择C++。管控面选择了golang。没选择C++的原因有如下几点:

1、C++特性太多,难以驾驭。

C++支持的特性很多,我们的团队成员不全是C++专家,不是每个人对这些特性都很熟悉。有些C++专家倾向于用高级特性、以及各种技巧,这会早晨普通程序员阅读和维护这部分代码很吃力。

有些团队使用编码规范来约束大家,规定那些特性不能用,比如google的C++编码规范很多内容都是不能用那些C++特性。实际上这种规范很难彻底执行,对有些C++专家来说,你不让他炫技,比杀了他还难受。

我们希望大家把更多精力用于学习存储技术,例如:如何实现ROW快照,用于崩溃恢复的日志如何设计,如何改进Raft让它更适合分布式存储系统,等等。我们不希望大家把很多时间浪费到学习C++语言上面。语言本身能带来的受益有限。

2、C语言代码与机器指令之间的对应关系更清晰,有利于Bug排查

分布式存储是基础软件,对Bug容忍度更低。现在服务器的内存都很大,当bug发生的时候,要把完整的内存coredump存储下来,几乎不可能。只能保存一些类似Linux内核的Oops信息一样的日志,通过分析这些信息,再结合反汇编代码去排查Bug。C++的众多特性,让这个过程更复杂。

3、跟我们项目关系密切的其他软件,也是是用C语言写的,比如:SPDK,Linux内核的块设备驱动等等,用C++写的很少。这一类基础软件,在稳定可靠和快速开发之间做取舍的时候,更倾向于稳定可靠。

总的来说,相对于C语言来说,写新的C++代码更容易,读懂老的C++代码更难。很多清晰易懂的C++代码,都有很多约束。不准用Excepition、不准用多态、不准用....,这样下来,跟C语言的区别不大了。问题是,这些约束在时间项目中很难落地。加上强约束的C++能得到的实际收益有限。为了避免无畏的争论,干脆不用。代码写的好不好,与选择C还是C++,关系不大。

https://weibo.com/1659957501/MBBKz0e7S?pagetype=homefeed