华为胡厚崑:中国算力网络标准需统一,硬件、应用接口、数据共享应相互兼容
480 2022-09-26
为什么C++没有Python之类语言这样活跃的生态?我觉得根本原因在于C++没有解决好一个问题:菱形依赖
什么叫菱形依赖呢?就是说A依赖B,A也依赖C,但是B和C同时依赖D,并且我们限定D并不是STL这样的标准库,BCD都是开源库。为了限定到C++,我们这里BCD都是C++库,采用源码的方式发布。
这种情况在生态活跃的语言中则是非常常见的。
在C++当中会怎样呢?
以上种种,最后对于C++库的作者来说,就变成了这样一个结果:
如果我要提供一个好用、好编译、不给我天天找事情的库,那么我不能引用其它的开源库
没有比这更矛盾的事情了,要造轮子,第一件事情是不能用别人的轮子。但是如果你要正经开发一个系统,你能保证自己不会有一天需要把这个代码重构成一个通用的库吗?那你就得从第一天开始避免用第三方开源库……
在Linux上面唯一有点生态的意思的做法,是引用yum/apt源里面的xxx-dev这样的库,这些库通过pkgconfig的方式组织,而且通过包管理系统保证大家下载到的都是相同且兼容而且编译好了的二进制库,引用起来很方便。但是,只有把接口限定到纯C才能发布确保二进制兼容的库,那折腾了半天,就算内部是C++开发的,一到库的边界上还得转成纯C,也就失去了C++语言的优势了。