自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python和Go,誰才是編程語言的“王者”?

原創(chuàng) 精選
開發(fā)
技術(shù)迭代的速度越來越快,這一點(diǎn)在編程語言的更新變化中尤為明顯。

技術(shù)迭代的速度越來越快,這一點(diǎn)在編程語言的更新變化中尤為明顯。前不久,Python開發(fā)商Anaconda發(fā)布了PyScript,讓Python應(yīng)用可以在瀏覽器中運(yùn)行。而在近日,開發(fā)者采用相同的思路讓Go也能在瀏覽器上運(yùn)行。

眾所周知,每種語言都有其獨(dú)特性的表現(xiàn),互相之間是不能替代的。Python和Go這兩種語言都是時(shí)下非常熱門的語言。從技術(shù)上講,Go是一種為速度而構(gòu)建的過程式函數(shù)式語言,而Python是一種面向?qū)ο?、命令式、函?shù)式和過程式語言。Go支持并發(fā),即算法能夠無序運(yùn)行其步驟,而Python不支持。

從最新一期的TIOBE編程語言排行榜可以看出,Python依然穩(wěn)定地占據(jù)榜首位置,Go則位列第14位。

 

TIOBE5月編程語言排行榜

“Python的功能最強(qiáng)大,而Go的速度最快”,這應(yīng)該能代表大多數(shù)程序員的心聲。事實(shí)上,Python和Go兩種語言雖然各有優(yōu)勢(shì),但在流行性上Python卻是略占上風(fēng)的。為什么Go語言沒有Python流行呢?

Python誕生更早,Go為需求而生

想要探究流行性的問題,從語言產(chǎn)生之初就可以初見端倪。

Python是1991年出現(xiàn)的,使用者眾,使得它具備大量完備詳實(shí)的文檔,幾乎所有的庫都有官方使用文檔,還有大量的開源項(xiàng)目,使用Python,可以復(fù)用前人經(jīng)驗(yàn)文檔代碼,因此Python可以很好的被集成到企業(yè)級(jí)應(yīng)用中。

Go是2009年由谷歌開發(fā)完成的,它主要是用來解決其他編程語言過重包袱和過分設(shè)計(jì)的語言,雖然它擁有很高的性能和速度,但舍棄了一些功能,比如它沒有強(qiáng)大的庫,也不支持繼承,不支持對(duì)象導(dǎo)向的編程,這使得它很適合輕量級(jí)的線程實(shí)現(xiàn)。

需要說明的是,Python產(chǎn)生得更早,使用的人更多,從而流傳的說明文檔和項(xiàng)目代碼也更多,這又促使用的人越來越多,形成了一個(gè)正向循環(huán)。而Go雖然也有很多優(yōu)點(diǎn),但它并不適合重量級(jí)項(xiàng)目,又沒有大量的庫,無法面向?qū)ο缶幊?,就基本隔絕了讓它火爆的可能性。接下來具體看看二者之間的區(qū)別。

一動(dòng)一靜,數(shù)量大PK速度快

1、語法:Python的語法使用縮進(jìn)來指示代碼塊,Go的語言基于打開和關(guān)閉括號(hào)。

2、范例:Python是一種基于面向?qū)ο缶幊痰亩喾妒?,命令式和函?shù)式編程語言。它始終堅(jiān)持:如果一種語言在某些情境中表現(xiàn)出某種特定的方式,理想情況下它應(yīng)該在所有情境中都有相似的作用。但它又不是純粹的OOP語言,它不支持強(qiáng)封裝。Go是一種基于并發(fā)編程范式的過程編程語言,它與C具有表面相似性,實(shí)際上,Go更像是C的更新版本。

3、并發(fā):Go擁有內(nèi)置的并發(fā)機(jī)制,而Python沒有提供內(nèi)置的并發(fā)機(jī)制。

4、類型化:Python是動(dòng)態(tài)類型語言,而Go是一種靜態(tài)類型語言,它實(shí)際上有助于在編譯時(shí)捕獲錯(cuò)誤,這可以進(jìn)一步減少生產(chǎn)后期的嚴(yán)重錯(cuò)誤。

5、用法:Python更多用于Web應(yīng)用程序,它非常適合解決數(shù)據(jù)科學(xué)問題。Go更多地圍繞系統(tǒng)編程,即Go更像是一種系統(tǒng)語言。

6、安全性:Python是一種強(qiáng)類型語言,它是經(jīng)過編譯的,因此增加了一層安全性。Go具有分配給每個(gè)變量的類型,因此,它提供了安全性。但是,如果發(fā)生任何錯(cuò)誤,用戶需要自己運(yùn)行整個(gè)代碼。

7、管理內(nèi)存:Go允許程序員在很大程度上管理內(nèi)存。而Python中的內(nèi)存管理完全自動(dòng)化并由PythonVM管理,它不允許程序員對(duì)內(nèi)存管理負(fù)責(zé)。

8、庫:與Go相比,Python提供的庫數(shù)量要大得多。

9、速度:Go的速度遠(yuǎn)遠(yuǎn)超過Python。

編程語言流行的秘籍

通過對(duì)比不難發(fā)現(xiàn),兩種語言各有各的優(yōu)勢(shì),也都各有不足。一個(gè)語言的流行,需要擁有足夠多的優(yōu)點(diǎn),并且缺點(diǎn)是不夠致命的。

Python:功能強(qiáng)大、用途廣泛

1、語法簡單

和傳統(tǒng)的C/C++、C#等語言相比,Python對(duì)代碼格式的要求沒有那么嚴(yán)格,這種寬松使得用戶在編寫代碼時(shí)比較舒服,不用在細(xì)枝末節(jié)上花費(fèi)太多精力。

Python是一種代表極簡主義的編程語言,閱讀一段排版優(yōu)美的 Python 代碼,就像在閱讀一個(gè)英文段落,非常貼近人類語言,所以人們常說,Python是一種具有偽代碼特質(zhì)的編程語言。偽代碼必須結(jié)構(gòu)清晰、代碼簡單、可讀性好,并且類似自然語言。

2、開源且免費(fèi)

主要體現(xiàn)在兩方面:一是程序員使用Python編寫的代碼是開源的;二是Python解釋器和模塊是開源的。開源的好處就是,總有那么一小撮人,他們或者不慕名利,或者為了達(dá)到某種目的,會(huì)不斷地加強(qiáng)和改善Python。

3、跨平臺(tái)

Python本質(zhì)上是用C寫的,有C編譯器的地方就有Python解釋器。對(duì)于橫行天下數(shù)十載的C來說,早已擁有大量適配的平臺(tái)。作為一種解釋型語言,Python是可以跨平臺(tái)的,可移植性更好。

4、功能強(qiáng)大(模塊眾多)

Python的模塊眾多,基本實(shí)現(xiàn)了所有的常見的功能,從簡單的字符串處理,到復(fù)雜的3D圖形繪制,借助Python模塊都可以輕松完成。

Python社區(qū)發(fā)展良好,除了Python官方提供的核心模塊,很多第三方機(jī)構(gòu)也參與進(jìn)來開發(fā)模塊,這其中就有Google、Facebook、Microsoft等軟件巨頭。即使是一些小眾的功能,Python往往也有對(duì)應(yīng)的開源模塊,甚至有可能不止一個(gè)模塊。

5、用途廣泛

Python適用于網(wǎng)站、桌面應(yīng)用開發(fā),自動(dòng)化腳本,復(fù)雜計(jì)算系統(tǒng),科學(xué)計(jì)算,物聯(lián)網(wǎng),游戲設(shè)計(jì),機(jī)器學(xué)習(xí),自然語言處理等很多方面。它旨在提高程序員的開發(fā)效率而不在于他們編的代碼。由于Python程序代碼簡單,所以和與其他程序語言相比,后期的程序維護(hù)更容易,更舒心。從商業(yè)角度來看,需要的成本降低,程序員的效率提高。

“人生苦短,我用Python”,這是當(dāng)下非常流行的一句口頭禪。但你有沒有想過,其他語言真的不香嗎?相比Python,Go也自有其優(yōu)勢(shì)。

Go:“天下武功,唯快不破”

1、部署簡單

Go編譯生成的是一個(gè)靜態(tài)可執(zhí)行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個(gè)基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要擔(dān)心應(yīng)用所需的各種包、庫的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和Python有著巨大的區(qū)別。由于歷史的原因,Python的部署工具生態(tài)相當(dāng)混亂,比如setuptools,、istutils、ip、buildout的不同適用場(chǎng)合以及兼容性問題。官方PyPI源又經(jīng)常出問題,需要搭建私有鏡像,而維護(hù)這個(gè)鏡像又要花費(fèi)不少時(shí)間和精力。

2、良好的語言設(shè)計(jì)

從學(xué)術(shù)的角度來說,Go語言其實(shí)非常平庸,不支持許多高級(jí)的語言特性;但從工程的角度來說,Go的設(shè)計(jì)是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎(chǔ)的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團(tuán)隊(duì)協(xié)作的一致性。比如Gofmt自動(dòng)排版Go代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時(shí)候自動(dòng)運(yùn)行Gofmt,這樣在編寫代碼的時(shí)候可以隨意擺放位置,存檔的時(shí)候自動(dòng)變成正確排版的代碼。此外還有Gofix,Govet等非常有用的工具。

3、更快的性能和并發(fā)性

在Go和Python之間,Go執(zhí)行起來要快很多是一個(gè)確定的事實(shí)。這是因?yàn)榕cPython相比,Go更節(jié)省資源。Python使用資源要求較高的線程,而Go使用獨(dú)立的Goroutine,這有助于節(jié)省CPU和內(nèi)存等資源。這種資源效率不僅有助于提高性能,還能帶來成本效益。

4、可擴(kuò)展性

Go擁有許多內(nèi)置功能,可處理多個(gè)并發(fā)Web請(qǐng)求,這反過來又使其成為編譯程序的高效語言。當(dāng)語言能夠處理多個(gè)并發(fā)請(qǐng)求時(shí),它自動(dòng)也具有很高的可伸縮性。隨著企業(yè)的發(fā)展,所使用的程序?qū)⑿枰瑫r(shí)做許多事情。因此,隨著Go對(duì)后端程序的支持,任何不斷增長的業(yè)務(wù)都將能夠更好地處理可伸縮性問題。

總的來說,Go更多是為了解決C或C+程序員編寫高并發(fā)程序時(shí)的痛點(diǎn)問題。從語法特征上來說,Go主要是服務(wù)于高并發(fā)后臺(tái)服務(wù)器程序而設(shè)計(jì)出來的小眾語言,不可能成為大眾語言。高并發(fā)和高開發(fā)效率,如同魚和熊掌不可兼得。

如何選擇?

Go和Python都易于使用和學(xué)習(xí)。Go真的很快,而Python則有大量的社區(qū)支持。目前,在Go的開發(fā)中,Go主要用于服務(wù)器端應(yīng)用程序。Python是數(shù)據(jù)科學(xué)家的首選語言,而且很可能會(huì)持續(xù)很長時(shí)間。

從研發(fā)人員的使用情況來看,在智能分析方面用Python編譯會(huì)比較多,在部分基層調(diào)用能力上則采用Go比較多。

從可擴(kuò)展性來看,Go在創(chuàng)建之初就考慮到了可擴(kuò)展性。其內(nèi)置并發(fā)性允許同時(shí)處理多項(xiàng)任務(wù)。Python也使用并發(fā)性,但并非內(nèi)置,它通過線程實(shí)現(xiàn)并行化。這意味著如果你打算處理大型數(shù)據(jù)集,Go應(yīng)是更適合的選擇。

從性能方面來看,Python并非內(nèi)存/CPU友好的語言,但它具備大量庫,可以高效執(zhí)行基礎(chǔ)的開發(fā)任務(wù)。Go具備內(nèi)置功能,更適合微服務(wù)軟件架構(gòu)。

從應(yīng)用角度來看,Python適合人工智能、數(shù)據(jù)分析、深度學(xué)習(xí)和Web開發(fā)任務(wù),而Go適用于系統(tǒng)編程,執(zhí)行云計(jì)算和集群計(jì)算應(yīng)用的開發(fā)者喜歡使用Go。

從社區(qū)與庫的角度來看,Python的歷史賦予它一定優(yōu)勢(shì),它具備大量庫,擁有大型支持社區(qū)。而Go語言仍在增長期,沒有那么多庫和社區(qū)支持。但是Go語言的增長率和采用率非常驚人,每天都在擴(kuò)張。

從執(zhí)行層面來看,如果速度是王道,那么Go遙遙領(lǐng)先。

考慮以上事項(xiàng)后,具體使用案例將成為采用哪種語言的決定性因素。假如你的開發(fā)團(tuán)隊(duì)要?jiǎng)?chuàng)建微服務(wù),那么Go是更合理的選擇,因?yàn)樗俣瓤?、易于編程、可擴(kuò)展性優(yōu)異。而Python更適合AI、ML和數(shù)據(jù)分析任務(wù)。開發(fā)者在選擇編程語言時(shí),應(yīng)考慮開發(fā)項(xiàng)目的性質(zhì)和規(guī)模,以及所需的技能組合。

不過,在選擇語言時(shí),也不用太糾結(jié)。因?yàn)镚o和Python這兩種語言都在持續(xù)演進(jìn)、擴(kuò)張和增長。這意味著,不管選擇哪種語言,未來開發(fā)者都將看到這些語言出現(xiàn)更多的功能和改進(jìn)。讓我們一起拭目以待吧!

51CTO技術(shù)精選月刊《CTO悟道》最新一期已經(jīng)上線!更多精彩技術(shù)干貨、知識(shí)見解等你揭曉,下載鏈接:??http://www.scjtxx.cn/journalDetail/5.html?down=3??


責(zé)任編輯:莫奇 來源: 51CTO
相關(guān)推薦

2023-05-15 12:33:47

JavaPython編程語言

2017-12-01 05:47:47

編程語言超級(jí)英雄程序

2023-03-05 15:07:13

Nodejs前端

2021-11-18 09:35:55

SREDevOpsLinux

2013-03-11 09:13:59

2018-11-12 14:00:24

橫評(píng)

2016-10-13 07:17:53

科技新聞早報(bào)微軟谷歌

2019-07-30 07:30:56

編程語言PythonJava

2022-07-25 17:44:59

編程計(jì)算機(jī)

2019-12-11 15:50:12

數(shù)據(jù)庫數(shù)據(jù)頁面

2011-12-15 09:53:32

高負(fù)載處理甲骨文IBM

2023-05-24 09:31:51

CGo

2021-12-08 12:20:55

KubernetesGitOpsLinux

2015-11-25 10:43:03

DGORust

2021-07-19 05:58:27

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2020-12-29 06:44:18

GoScala編程語言

2016-06-29 10:37:33

Python編程Swift

2022-04-26 18:08:21

C語言代碼編程規(guī)范

2019-02-11 08:32:22

編程語言Go

2020-07-30 13:22:19

語言Android大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)