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

用戶68736146


正巧,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++程序員:他們熱衷於重複造輪子,別人的東西都是不可靠的,只有自己的才是最可靠的,如果精力、時間允許,用別人的遠不如自己造,。

  • 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++沒有python那麼多的開源庫。

1.經濟模式的問題。那個時代IT從業人員很少,互聯網也遠沒有現在發達。一個公司的核心資產就是代碼,代碼就可以賣錢。產品迭代週期都是以年為單位計的,代碼的開發耗費巨大,一旦代碼洩露就損失慘重,所以沒有人願意把辛辛苦苦開發出來的代碼開源出來。即使願意將代碼開源出來,沒有互聯網的支撐也無法普及。

2.開源的力量被逐漸認識。隨著IT行業的逐漸成熟,特別是LINUX的這個開源旗幟的影響,人們發現原來通過開源可以培養自己所需的人才,將產品滲透到各行各業。作為開源庫作者,更可以提高自己在業界的知名度,同時帶給自己成就感,一舉多得。各種因素使得開源行為被大家所推崇,營造出開源的流行趨勢。

3.學習門檻和從業人員的問題。從學習門檻上看,python比C++低很多,開發效率相反卻高很多。開發一個python開源庫所耗費的精力比開發一個C++庫節省太多人力,一個人可以利用業餘時間很容易的開發出一個開源庫。

4.標準化的提高。得益於IT行業的標準化程度越來越高,很多標準被髮布出來。這些標準使得接口行為一致化。在這個前提下,大家也會越來越樂於使用開源庫,而不必因為不一致從輪子開始做起。

5.python的開源化運營。python能夠在這些年興起,也得益於其作者的開源化運營。你可以很方便的在網上找到開源庫和學習資料。

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




FishTree


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

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

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

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



80攻城獅


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


左響腳


這似乎不應該這麼比,我用Python用的多,c++用的少,以我自己的理解來看,c++多是創造性的東西,而Python多是應用性的東西,舉個不恰當的例子,c++的工作更多的是像伏特發明伏打電堆、歐姆發明電流表、法拉第發明電動機一樣的創造性工作,而Python更多的是像用電動機組裝個電動車、用電流表測量電量、用伏打電堆給電動車供電等類似的應用性工作。

它們的應用場景決定了他們的外在特點,就如同現實世界一樣,國際單位只有七個基本單位,物理學的力就那麼幾種,其他基本效應也屈指可數,可是社會上各種發明物就多了去了,人造的物體根本數不過來,光車就分獨輪車、雙輪推車、四輪推車、自行車、三輪車、平衡車、遙控車、電動車、拖拉機、越野車、跑車、房車、卡車。。。數不過來根本。

這就是Python庫多,而c++看著貌似少的原因


歡暢農夫


談談我個人的感受吧。你的問題提的非常到位,是開源的庫。所以說C++閉源的庫是有很多的,否則這麼多年來各大IT巨頭也不會用它來編寫操作系統了。而開源真正火起來時間並不是很長,而Python正是在開源的思想火起來的過程中發展壯大的。所以Python從一開始就被很多熱衷於開源的人推動著編寫了很多開源的庫。而C++已經是很成熟的東西,除非是新寫的庫。所以看起來C++沒有Python開源的庫多了。


greatfeather


大部分優質的Python開源庫都是對C/C++庫的封裝,由Python語言的特性使然,使用的人多,只是在應用層開源庫多。但是去掉重複的輪子,在比較就差不多了,假像而已。Linux系統開源,那麼多系統工具、系統庫是開源的,只是用的人少了,假像而已。


Mok666


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

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



閉著眼睛切土豆


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 製作軟件的腳本系統擴展


分享到:


相關文章: