为什么C++没有Python那么多开源库?_菱形依赖

在Linux上面唯一有点生态的意思的做法,是引用yum/apt源里面的xxx-dev这样的库,这些库通过pkgconfig的方式组织,而且通过包管理系统保证大家下载到的都是相同且兼容而且编译好了的二进制库,引用起来很方便。但是,只有把接口限定到纯C才能发布确保二进制兼容的库,那折腾了半天,就算内部是C++开发的,一到库的边界上还得转成纯C,也就失去了C++语言的优势了。


只是没有一个集中的包管理系统(网站)而已,库都要自己找自己编译,哪像java一样,配置一下依赖就自动下载编译加入项目,或者py一样直接install就完了。现在c++的包管理,像vcpkg这样的,提供的库列表也不够全,有的还是要靠自己去找。而且由于c++的语言特性,就算是包管理自动下载的,可能也因为各种原因编译不过,还得自己去调整。
链接:https://www.zhihu.com/question/375368576/answer/1047465171


链接:https://www.zhihu.com/question/375368576/answer/1049057305

因为很多 C++程序员的口号就是:别人的东西都是不可靠的,信不过的,只要我精力和能力允许,用别人的还不如自己造,只有自己的才是最可靠的。因此从性格上就不倾向于协同,碎片严重。

而 Python 程序员的口号则是:有现成的用现成的,没现成的找现成的,找不到,我就不做了,因此从性格上倾向于协作。

很多 C++ 项目造轮子之心比 python 强很多,代码都没写三行,起手就是一个 BaseObject,要用我的库,必须继承我这个 BaseObject 或者 BaseTemplate,所有参数传递都要套一个 base::my_smartest_ptr 的劣质套套,再来一个 mini 基础库,定义一堆新的数据结构让你用。

人家就是来买你一根烤羊肉的,你就爱在你的烤肉串外面套一层 shit 强卖给人家,人家恐怕连你羊肉串都不想吃了。

Python 不会有这个情况,首先 py 基础库非常强大统一,不需要象 C++ 一样,项目稍微写大点都要发明半套基础库一样,成为新项目使用的障碍。Python 项目大部分就是专注解决 1-2 个痛点,不执着造轮子,不同的项目就容易在统一的基础库的语义下进行协同。

好点的 C++ 库是非侵入式的,比如把 API 封装成 C 的,全部用基础类型作为接口,这样内部你自己用成一朵花都没人管你,用 cffi 让脚本语言直接调用也比较方便。

因此从好恶上,前者更偏向于单枪匹马自己搞定一切,而后者更喜欢协同。


其实python的排名靠前的开源库核心部分都是c/c++的,python一直是一种便利的外壳语言,非常简单方便。现在大多c/c++模块也都愿意封装成python可调用模块之后使用,在python引入context之后更方便了,整个context内的代码可实现为全部被接管,看起来像python,或是可以python直接运行。其实实际上被接管之后后端可采用平台相关的各种优化库,CUDA,OPENCL,MPI之类的都可以。

​ 所在强烈建议使用纯python的去学习c/c++,可以极大拓展使用python的威力。而还没有接触python的c/c++的开发者学习python,可以极大增强现在工作流的便利性。

作者:saturnman
链接:https://www.zhihu.com/question/375368576/answer/1058324189
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:nullptr
链接:https://www.zhihu.com/question/375368576/answer/1060186756
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

C++的库,或者说C++吧,很多东西可以算很依赖编译器、构建工具之类的版本、特性等等的了,"Header Only"的库好多也这样。

最简单的就是这样一种情况,源码全给你了,怎么编译都说了,也会有很多人编译半天都编译失败,就算是很熟练掌握那一套编译、链接过程的,有时候可能也要去稍微改一下库的源码,适配一下自己的环境。

然而你要是没搞好,报错就算了,要是你用的库模板多,那套娃式报错上来给你来几十条几百条,要是写库的人写飞了什么指针,那错误定位也是麻烦得很…

良心的库,会针对各个主流平台做测试、适配,比如LLVM,每次release那一堆,但很多库作者是大佬中的大佬,他觉得这些东西都挺简单的,我核心思想都给你了,你应该一点通啊,自己写一个都可以了。

而且C++范式多,C++的开发者也都在自己吵,都觉得自己的范式是对的,这样库的特异性就更高了。

Python的库,因为python这一类语言的特点,本身社区就比较统一,绝大部分的库都是直接拿过来import就可以了,尽管很多底层可能是C++来做的,但毕竟有大佬给套壳了,这样使用门槛大大降低,所以感觉上python开源库就特别多。

(我觉得C++的库还算挺多的…就是拿来即用的可能是真的不多…)


大家都说的很全了, 还有一点没人提.

C/C++ 自由度太大, 引入一个垃圾库, 风险太大.

万一有个逗比指针飞了, 你怎么从 50+ 个依赖里找到谁是有问题的…

带 VM / 胖 runtime 的语言总有兜底. C++ 是直接炸穿.

写 C++ 代码就像做外科手术, 每一行代码都很厚重的…

一些久经考验的库, 比如 gflags, gtest, 用的还是非常广泛的.

作者:林谨
链接:https://www.zhihu.com/question/375368576/answer/1058412374
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:机器学习入坑者
链接:https://www.zhihu.com/question/375368576/answer/1049634508
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

*C++开源库*:

菜鸟和大神都不会用,菜鸟不会用是因为不懂,大神不会用是因为不屑。菜鸟无奈转行学python,大神们开始用C++写开源库,然后成为业界标准。

*python开源库:*

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值