首頁>Club>
13
回覆列表
  • 1 # 嘉靖不上朝

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

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

  • 2 # SuperBean

    正巧,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++寫專案的都是大神,不屑於呼叫開源庫,實現任何功能都是自己造輪子,用時間換取更貼合自己專案的功能,使自己程式更加短小精悍,最終結果也就是越來越閉源。

  • 3 # kamojia

    C++時代,還不是開源時代,大家都是閉源。寫個功能,dll就能賣錢。那個時代技術值錢,網路也不發達。很多功能是要買的。

  • 4 # 小樂爸爸

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

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

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

  • 5 # 樂學酷思

    剛好經歷了這個時代的變遷,我來說說為什麼C++沒有python那麼多的開源庫。

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

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

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

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

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

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

  • 6 # 軫念信箱

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

  • 7 # 一個程式設計師的奮鬥史

    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++,第三方庫的編譯整合這第一步可能就把很多初學者擋在門外了。

  • 8 # 高科技讓人煩惱

    c++的開源庫其實比Python多很多,只是應用方向不同,題主和回答Python多的根本沒接觸多少c++而已。

  • 9 # NC少年

    作為一個十五年的非專業碼農,從大學時代的的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者得天下,無他,人多而已。

    故事完。

  • 10 # 既不是廚子也不是戲子

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

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

  • 11 # summer7

    做過多年的c++和python的開發,從我看來,有兩個原因,第一個是流行度,第二個是語言難度:

    1. c++是系統語言,用來開發大規模,搞效能的系統級別軟體。它目前的應用場景,是不如python多的,系統級軟體開發的需求目前並不算大,使用人群不廣。python可以用來做web,用來做桌面,可以用來做科學計算,可以用來做大資料,近些年這些方面的應用大熱。需求多,場景多,用的人多,開源庫自然就多。

    2. c++入門門檻較高,一般人玩不轉,更別說做成開源庫了。python入門簡單,隨便什麼人學兩天,都能造個輪子出來。就像陽春白雪和下里巴人,就行經典音樂和流行音樂,流行音樂自然就更多,經典音樂自然更少。語言的難度,也是造成這個局面的原因。

  • 12 # 玩趣世界

    其實python直譯器本身就是C語言開發的,本質上來講Python就是一種C庫,那麼某種程度上所有的Python庫也都是C庫

  • 13 # 老牛識圖621

    c++的通用庫相對少,二進位制庫不一定直接能用,庫之間依賴的話,有原始碼都不一定能編繹透過。具體的應用往往只想要某絲庫的一部分功能,一旦用上庫,感覺瓶瓶罐罐都上了,太笨重,還是自己搞下算了。

  • 14 # 覓光者

    c/c++開源庫肯定是所有語言裡面最多的,或者說開原始碼數量以及開源高質量程式碼數量等所有指標都是最多的,只是你不知道而已。從作業系統到應用層 無所不包。你一個Python程式設計師怎麼會知道呢?當然,如果單論應用層的話 可能不見得是最多的,因為c、c++程式設計師喜歡自己擼,不是什麼應用都喜歡堆砌開原始碼的,因為應用層開源維護起來比自己開發還麻煩,再者,大多c、c++程式設計師都很自信或自負,不屑於用開源軟體。

  • 15 # ozinfo

    這主要是因為python容易上手而功能也足夠強大。現實中,不同領域的專家們,精通專業和其演算法,但不擅長寫程式碼,也沒有那麼多時間來寫。而python語言提供了這樣一種工具,讓他們可以在計算機上驗證他們的模型。時間—長,python 裡的模組(庫)自然就越來越多。

  • 16 # 縹緲星塵

    不是少,而是沒有對c ++熟悉。當然,要現成的實現某個使用者介面的的確少。C++本身就是用來為二次開發製作工具的平臺。

  • 17 # 枝枝葉葉

    c++ 開源庫也不少,好多python 庫,就是對c++ 程式碼的封裝,c++ 開源庫都可以封裝成python 的,python 的封裝不成c++

  • 18 # 條頭股東

    指令碼語言可以邊執行變報錯 C等編譯語言 沒有編譯成功就無法執行 因此如果見效快的 寫一行程式碼就可以直接斷點執行感覺開發很快的樣子 。 國外開源基本C語言為主 指令碼語言為輔助 比如利用指令碼一眼批次生成C語言再進行編譯 wireshark 就是其中典型

  • 19 # 開課吧科科

    為什麼C++沒有Python之類語言這樣活躍的生態?我覺得根本原因在於C++沒有解決好一個問題:菱形依賴

    什麼叫菱形依賴呢?就是說A依賴B,A也依賴C,但是B和C同時依賴D,並且我們限定D並不是STL這樣的標準庫,BCD都是開源庫。為了限定到C++,我們這裡BCD都是C++庫,採用原始碼的方式釋出。

    這種情況在生態活躍的語言中則是非常常見的。

    在C++當中會怎樣呢?

    B和C中至少一個將D的原始碼合併到了自己的原始碼裡面,放到thirdparty之類的目錄裡面。A將兩份原始碼加自己的一起放到thirdparty裡面,編譯,符號衝突,爆炸。B和C在install說明中提到,必須把依賴放到某個地方,然後修改Makefile/CMAKE/Bazel配置,將D的原始碼目錄加進來。結果B和C編譯出來的.a裡面還是帶著D的全部符號,A嘗試二進位制連結,符號衝突,爆炸。B和C在install說明中提到,需要將D的依賴放在某個地方,先編譯成.a,設定好引數直接連結.a。但是B和C要求的D的編譯引數不一樣,連結不到一起,爆炸。把所有的依賴都一個一個放在獨立的位置上,設定好include目錄,每個都用自己的Makefile獨自編譯成.a,編譯引數用同一套,最後再一個一個指定起來連結到一起——人工成本爆炸。A希望B和C透過動態連結方式連線,方便升級。動態連結庫裡面連結了D的符號,載入起來符號衝突,爆炸。B和C一個動態連結了D,一個靜態連結了D,還是符號衝突,爆炸。D把自己改成了header only的庫,終於不需要單獨編譯了。B和C在引用D的時候設定的宏不一樣,導致編譯出的弱符號不相容,連結完執行崩潰,爆炸

    以上種種,最後對於C++庫的作者來說,就變成了這樣一個結果:

    如果我要提供一個好用、好編譯、不給我天天找事情的庫,那麼我不能引用其它的開源庫

    沒有比這更矛盾的事情了,要造輪子,第一件事情是不能用別人的輪子。但是如果你要正經開發一個系統,你能保證自己不會有一天需要把這個程式碼重構成一個通用的庫嗎?那你就得從第一天開始避免用第三方開源庫……

    在Linux上面唯一有點生態的意思的做法,是引用yum/apt源裡面的xxx-dev這樣的庫,這些庫透過pkgconfig的方式組織,而且透過包管理系統保證大家下載到的都是相同且相容而且編譯好了的二進位制庫,引用起來很方便。但是,只有把介面限定到純C才能釋出確保二進位制相容的庫,那折騰了半天,就算內部是C++開發的,一到庫的邊界上還得轉成純C,也就失去了C++語言的優勢了。

  • 20 # 一起揣手手

    因為c++沒有統一的執行環境,導致開發庫難度係數較高。另外c++應用場景更加偏向於基礎功能性,比較少具體應用庫,這也是語言使用環境導致。

    python更偏向於工具屬性,所以會有很多工具類開源庫,更偏向於實際應用。

  • 中秋節和大豐收的關聯?
  • 《逆戰》爆破和團隊有什麼區別?