03.06 為什麼C++沒有Python那麼多開源庫?

用戶68736146


  • 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能夠在這些年興起,也得益於其作者的開源化運營。你可以很方便的在網上找到開源庫和學習資料。

總之,他們的出生年代和他們所處的發展階段就決定了他們的命運。




FishTree


這似乎不應該這麼比,我用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 製作軟件的腳本系統擴展


偶然回眸


這不就是就是需求問題,用Python的人多數都是懶得想細節的 相當於 富士康。喜歡用C++的人多數都是喜歡搗鼓愛折騰的人,不然也學不會C++噻,相當於早期蘋果公司。從代碼角度看:一個只看代碼結果,一個執著代碼細節過程。所以py更喜歡用庫,對庫的需求更多。隨之而來的就是造庫的人多,從而庫越來越多。但是問題來了,由於大多都是開源庫,哪天造庫的人沒了,或者開源庫漸漸變成收費的咋整。

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


既不是廚子也不是戲子


這個問題,其實我們可以觀察一下,所有越高級,或者說複雜性越低的語言,你可以用到的來源庫,開源框架越多。

像java、python、 php這類語言,更像是一種工具性語言。

而c天/c++更像一種基礎性語言。

所以,開源庫多少,很大程度是各種語言自身所擅長的領域決定的……



小樂爸爸


和使用人數有關,C++屬於底層一些,編譯型語言,使用的人少一些,需要的編程能力要高於Python。

至於Python一個純粹的解釋型腳本語言,簡單易學,使用的人比較多,自然大家貢獻代碼多了,基礎庫也豐富。



閉著眼睛切土豆


以前很多語言都不太注重包管理這塊,庫沒有統一的管理中心,會出現很多重複的輪子,社區的力量被分散,高質量的庫就少了,你看近幾年出來的golang和rust,特別是rust,和C++對標的語言,包管理做得很好,管理中心crates.io上的庫也積累越來越多


分享到:


相關文章: