为什么C++没有Python那么多开源库?

用户68736146


谈谈我个人的感受吧。你的问题提的非常到位,是开源的库。所以说C++闭源的库是有很多的,否则这么多年来各大IT巨头也不会用它来编写操作系统了。而开源真正火起来时间并不是很长,而Python正是在开源的思想火起来的过程中发展壮大的。所以Python从一开始就被很多热衷于开源的人推动着编写了很多开源的库。而C++已经是很成熟的东西,除非是新写的库。所以看起来C++没有Python开源的库多了。


greatfeather


  • C++程序员:他们热衷于重复造轮子,别人的东西都是不可靠的,只有自己的才是最可靠的,如果精力、时间允许,用别人的远不如自己造,。

  • Python程序员:拿来主义编程,有现成的用现成的,没现成的找现成的。


作为一名C/C++开发者,我要在这里来平反了。C++的开源库真的要比Python少吗?下面我来推荐推荐优秀的C++库。

  • Boost

史上最强大的C++通用库,里面包含大量通用C++库的集合,而且很多优秀的库已经被C++最新标准收纳,例如auto、thread、filesystem等。

  • OpenSSL

加解密必备,一个强大的,商用的,功能齐全的,开放源代码的加密库。。

  • cpr

Python网络爬虫的朋友应该都知道「requests」库 ,那么在C++中有没有这么好使的网络库呢?答案是肯定的!cpr,你值得拥有。Curl for People, a spiritual port of Python Requests!

有了它,我们C++程序员也可以很优雅的发起HTTP请求了。

  • RapidJSON

腾讯开源的一个高效的C++JSON解析器及生成器,只需在项目中包含头文件即可,跨平台支持。

  • Libxml2

XML解析库。

  • WebAssembly

Web开发过程中,如果你的图片数量到了一定的规模,那展示的效果肯定是卡顿、差强人意的,这时候试试WebAssembly,你会有新的发现。

  • ZLib

高效的压缩库,当然boost里面也集成了很多压缩库。

  • OpenCV

开源计算机视觉类库,玩图形学的同学肯定知道这东西的。

  • Thrift

高效的远程过程调用(RPC)框架,支持C++、PHP、Java等多种主流语言。

  • CppCMS

免费高性能的Web开发框架。


如果感兴趣的话,可以参考下Github的开源项目「awesome-cpp」,里面包含了几乎所有知名的C++库,包含但不限于加解密、网络、音视频、PDF、图形处理、人工智能等等等等。


C++是绝地求生中的吃鸡玩家,基本上你能看到的开源库,都是经过了一些列的大PK,C++的世界中,只有强者才能生存到最后成功吃鸡。它更像是一把锋利的瑞士军刀,语法复杂但是功能超级强大,一般人难以驾驭。


Python作为一名“胶水语言”,其优点就是库多库多库多!是一种高性能的重武器。



我想,之所以C++给别人留下库少的原因,也许是它少了那个「中心化的库分发机制」吧!在Python中,我们通过一条简单的pip命令即可完成第三方库的安装,而C++,第三方库的编译集成这第一步可能就把很多初学者挡在门外了。


一个程序员的奋斗史


正巧,c/c++和python都写过项目,题主所述的c++没有python开源库多,我是认同的。

代码本质上。c++是编译型语言,python是解释型语言。c++很多静态或者动态的类库都是闭源的,比如Linux里面的.a文件是静态库,.so文件是动态库,比如windows里面的.lib文件是静态库,.dll文件是动态库,都是二进制文件。所以如果问题把“开源”去掉,就值得商榷了,可以这么说,只要你c++玩的溜,整个操作系统API都是你的类库。

c++太底层了,导致其实很多著名的python的库都衍生自c++库。

方便程度上。前面说了,c++的开源库最终都要编译成静态库或者动态库被你自己的代码调用。Linux下面./configure,然后make,readme里面基本就这两句话,看着命令行一堆报错,你会痛骂作者是个大忽悠。windows更惨,你是vs2008的编译器,开源库只给了vs2012的工程文件,这时候你就要考虑是把你的代码升级到vs2012上报错少,还是把开源库降级到vs2008报错少,考虑再三,还是不用第三方库了,看懂开源代码,自己动手实现得了,想偷懒发现更麻烦了。python很简单,pip下下来就可以直接用了,唯一要考虑的就是py2和py3的区别。

应用场景上。python偏应用层,追求的就是开发效率,对程序员要求比c++低,更适合于初学者和编程爱好者,自然需要更多的库来支持,后面自然而然出现pip这样全球共享的平台也不奇怪。c++却感觉慢慢走向精英语言,很多技术被大企业控制,形成商业软件,使用它们的接口价格昂贵,能够在大企业用c++写项目的都是大神,不屑于调用开源库,实现任何功能都是自己造轮子,用时间换取更贴合自己项目的功能,使自己程序更加短小精悍,最终结果也就是越来越闭源。


SuperBean


作为一个十五年的非专业码农,从大学时代的的C,到工作后的C++、Java,再到如今的Python,说下我的理解。核心关键字:人头,两个核心观点:

  • python人多,C++人少,人多开源库自然多
  • python原生支持跨平台,面向的用户更广阔,潜在用户多

数量上而言,python取胜,但也要看具体领域

总体而言,python的开源库比C++的开源库多,但具体还是看细分专业领域。尺有所长,寸有所短,python不是万能的,某些领域python不是强项。以下是 github开源仓库下,随机抽的三个主题的语言分布:

  • iOS开发是swift和objectiveC的天下
  • 算法领域,java、c++、python基本三分天下
  • 深度学习领域,python独霸天下

再说,python为什么人多。

人生苦短,我用python。

python 易上手,门槛低,开发效率高,令python开发者众多(个人觉得说是 C++的10倍,不过分)。

没有对比就没有伤害,再看C++,从编写、编译、到跨平台,都十分繁琐枯燥。这种对计算机的精细控制,使得C++开发者对专业要求更高,精细控制,使得程序运行效率高,但也就意味着人少。

有了python,写个快速排序加调试,三分钟搞定。而C++写快排再到调试,至少两倍的时间。人都是偷懒的,尤其是程序员,对于想法的初步验证,毫无疑问选 python。

从专业性角度讲:

  • python基于虚拟机PVM,原生支持跨平台;更能通过pip/conda联网更新软件库;高级语言代码简洁,如同伪代码;
  • C++更接近硬件,从指针、引用、静态类型,字节力度的控制,使得C++执行效率高,适合编写核心部份。

python之于C++,如同大众之于专家

说白了,C++跑得快,就像职业的跑步选手。而python更像大众平民,人人都可以跑步,全民健身,虽然跑得慢,但是贵在参与。核心部份要更快更高更强,比如奥运会必定要专业选手上场。专业选手的专业性,就体现在人少。人少,贡献的人头数量就少,但不意味着贡献小,不以数目论英雄。除了数量,还要看质量。


最后再来一个江湖故事。

传说G厂,找了一帮C++大神开发了一款跨时代的软件,但是用户太少怎么办?有人建议提供python的API,果然之后如火如荼,这款软件享誉全球。

而F厂同时,觉得G厂的设计反人类,也设计了一款软件,可惜软件是用小语种语言写的,虽然设计可以拿奥斯卡奖,但是无人问津。之后,F厂用python重写了该软件,取名Pytorch,和G厂评分天下。

想到士兵突击的一句台词,“明明是一个强人,却天生一副熊样!”。说的就是torch

,如果F厂最初就用python来包装,而不是 lua的熊样,早以雄霸天下。

相信码农都猜出来了,G=Google开发Tensorflow; F=Facebook开发Pytorch。

总之,Google用C++开发,套了一层Python,快速抢占市场;而Facebook的 torch,采用Lua失去先机,后来用Pytorch来迎头赶上。

结论:得python者得天下,无他,人多而已。

故事完。


平凡科技


刚好经历了这个时代的变迁,我来说说为什么C++没有python那么多的开源库。

1.经济模式的问题。那个时代IT从业人员很少,互联网也远没有现在发达。一个公司的核心资产就是代码,代码就可以卖钱。产品迭代周期都是以年为单位计的,代码的开发耗费巨大,一旦代码泄露就损失惨重,所以没有人愿意把辛辛苦苦开发出来的代码开源出来。即使愿意将代码开源出来,没有互联网的支撑也无法普及。

2.开源的力量被逐渐认识。随着IT行业的逐渐成熟,特别是LINUX的这个开源旗帜的影响,人们发现原来通过开源可以培养自己所需的人才,将产品渗透到各行各业。作为开源库作者,更可以提高自己在业界的知名度,同时带给自己成就感,一举多得。各种因素使得开源行为被大家所推崇,营造出开源的流行趋势。

3.学习门槛和从业人员的问题。从学习门槛上看,python比C++低很多,开发效率相反却高很多。开发一个python开源库所耗费的精力比开发一个C++库节省太多人力,一个人可以利用业余时间很容易的开发出一个开源库。

4.标准化的提高。得益于IT行业的标准化程度越来越高,很多标准被发布出来。这些标准使得接口行为一致化。在这个前提下,大家也会越来越乐于使用开源库,而不必因为不一致从轮子开始做起。

5.python的开源化运营。python能够在这些年兴起,也得益于其作者的开源化运营。你可以很方便的在网上找到开源库和学习资料。

总之,他们的出生年代和他们所处的发展阶段就决定了他们的命运。




多学酷思


这似乎不应该这么比,我用Python用的多,c++用的少,以我自己的理解来看,c++多是创造性的东西,而Python多是应用性的东西,举个不恰当的例子,c++的工作更多的是像伏特发明伏打电堆、欧姆发明电流表、法拉第发明电动机一样的创造性工作,而Python更多的是像用电动机组装个电动车、用电流表测量电量、用伏打电堆给电动车供电等类似的应用性工作。

它们的应用场景决定了他们的外在特点,就如同现实世界一样,国际单位只有七个基本单位,物理学的力就那么几种,其他基本效应也屈指可数,可是社会上各种发明物就多了去了,人造的物体根本数不过来,光车就分独轮车、双轮推车、四轮推车、自行车、三轮车、平衡车、遥控车、电动车、拖拉机、越野车、跑车、房车、卡车。。。数不过来根本。

这就是Python库多,而c++看着貌似少的原因


欢畅农夫


C++的第三方库和Python的第三方库几乎一样多,主要原因是基于C++的应用场景和C++的C语言基础,大量遗留的特定行业 C 语言接口,以及C++通用库(比如Boost)涵盖一般编程任务的各个方面。

关键是 Python 的第三方扩展库大量的是基于 C/C++ 库的,比如 Python 对各种 DBMS 的接口API。

最后,Python 和 C/C++ 不能横向对比,他们的使用场景不同,而且在实际的产品中通常是一种高效的编译性语言(如C/C++)+ 一种灵活的脚本性语言(如Python、Javascript)相组合的而发挥它们各自的优势,可以参考流行的游戏引擎中脚本子系统的实现,还有像 3ds Max、SketchUp 这种 3D 制作软件的脚本系统扩展


偶然回眸


这个问题,其实我们可以观察一下,所有越高级,或者说复杂性越低的语言,你可以用到的来源库,开源框架越多。

像java、python、 php这类语言,更像是一种工具性语言。

而c天/c++更像一种基础性语言。

所以,开源库多少,很大程度是各种语言自身所擅长的领域决定的……



小乐爸爸


和使用人数有关,C++属于底层一些,编译型语言,使用的人少一些,需要的编程能力要高于Python。

至于Python一个纯粹的解释型脚本语言,简单易学,使用的人比较多,自然大家贡献代码多了,基础库也丰富。



闭着眼睛切土豆


这不就是就是需求问题,用Python的人多数都是懒得想细节的 相当于 富士康。喜欢用C++的人多数都是喜欢捣鼓爱折腾的人,不然也学不会C++噻,相当于早期苹果公司。从代码角度看:一个只看代码结果,一个执着代码细节过程。所以py更喜欢用库,对库的需求更多。随之而来的就是造库的人多,从而库越来越多。但是问题来了,由于大多都是开源库,哪天造库的人没了,或者开源库渐渐变成收费的咋整。

想到了一句话:格力掌握核心科技。👀


分享到:


相關文章: