国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【2016——-編程語言排行以及優(yōu)缺點(diǎn)分析】

2019-11-11 00:59:14
字體:
供稿:網(wǎng)友

網(wǎng)上一直流傳個笑話,相信大家已經(jīng)耳熟能詳了:

C++程序員看不起C程序員,

C程序員看不起java程序員,

java程序員看不起C#程序員,

C#程序員看不起美工。

周末了,美工帶著妹子出去約會了,一群SX程序員還在加班。哈哈...

然后編程語言大戰(zhàn)一觸即發(fā)。

論壇里偶爾也會聽到同行抱怨:這個語言哪里哪里不好不好,那個語言又是如何如何的優(yōu)秀。

對于這樣的牢騷,一笑奈何。

下面這個排行大家看看就可以了。

個人覺得就我們程序員而言,語言只是工具,沒有優(yōu)差好壞之分。

只要你使用相應(yīng)的語言,完成相應(yīng)的工作,你的目標(biāo)就完成了。

我們無需抱怨這種語言的缺點(diǎn),而應(yīng)該抱有接受的態(tài)度。

任何語言的存在都有它的合理性,如果不合理是經(jīng)受不住時間的考驗(yàn)的。

世間之物都具有雙面性,只是看利多還是弊大。

如果一個東西是十全十美的,那我毫不猶豫的告訴你,一種情況是它不存在,另一種情況是你還沒發(fā)現(xiàn)它的缺點(diǎn)。

       每種語言都有自己得天獨(dú)厚的優(yōu)勢,當(dāng)然缺點(diǎn)同時伴存。

C語言是計算機(jī)界的常青藤。

C語言執(zhí)行效率高,用于寫底層的驅(qū)動那是再適合不過。

指針是C語言的精華。

而C++是很強(qiáng)大的,只要你是個高手,你幾乎可以利用C++完成任何事情。當(dāng)然虛函數(shù)是C++的精華。

Java取消了指針,這是應(yīng)該喜還是憂。喜的是,沒有C或者C++那種對內(nèi)存繁瑣的操作,而且也降低了很多致命性的錯誤發(fā)生的概率。憂的是,效率大打折扣,采用虛擬機(jī)的方式使得Java有跨平臺的特性,必然會使得效率降低。

另外一個方面,你借別人的東西使用(內(nèi)存),是不是應(yīng)該還回去呢?從這一方面考慮,C或者C++的設(shè)計思想更有意義。

經(jīng)常關(guān)注TIOBE世界編程語言排行榜,Java已經(jīng)有很久排名第一,我覺得這樣的排名只是看看而已,無需過多的信奉。

下面讓我們來一起看看幾種主要語言的優(yōu)缺點(diǎn)把。

 

C語言

 

C語言的優(yōu)點(diǎn):

1.簡潔緊湊、靈活方便

2.運(yùn)算符豐富

3.數(shù)據(jù)結(jié)構(gòu)豐富

4. C是結(jié)構(gòu)式語言

5. C語法限制不太嚴(yán)格,程序設(shè)計自由度大

6. C語言允許直接訪問物理地址,可以直接對硬件進(jìn)行操作

7. C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高

8. C語言適用范圍大,可移植性好

9. C語言有一個突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng),如DOS、UNIX,也適用于多種機(jī)型

10.有效地將一個較復(fù)雜的程序系統(tǒng)設(shè)計任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)

 

C語言的缺點(diǎn):

1. C語言的缺點(diǎn)主要是表現(xiàn)在數(shù)據(jù)的封裝性上,這一點(diǎn)使得C在數(shù)據(jù)的安全性上做的有很大缺陷,這也是C和C++的一大區(qū)別。

2. C語言的語法限制不太嚴(yán)格,對變量的類型約束不嚴(yán)格,影響程序的安全性,對數(shù)組下標(biāo)越界不作檢查等。從應(yīng)用的角度,C語言比其他高級語言較難掌握。

3.可重用性差

4.數(shù)據(jù)安全性差

5.難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件

6.把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立的實(shí)體

7.當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時,所有相關(guān)的處理過程都要進(jìn)行相應(yīng)的修改

8.每一種相對于老問題的新方法都要帶來額外的開銷

9.圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難

 

C++

 

C++優(yōu)點(diǎn):

1.可擴(kuò)展性強(qiáng)

2.高效 簡潔 快速

3.可移植性

4.面向?qū)ο蟮奶匦?/p>

5.強(qiáng)大而靈活的表達(dá)能力和不輸于C的效率

6.支持硬件開發(fā)7.程序模塊間的關(guān)系更為簡單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障

8.通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護(hù)都更為方便

 

 

C++缺點(diǎn):

1.比較底層,易用性不是很好

2.多重繼承和友元機(jī)制

3.標(biāo)準(zhǔn)庫涵蓋范圍不足4.開發(fā)周期長

5.非并行

6.掌握有難度

7.粒度封裝不夠

 

Java

 

Java的優(yōu)點(diǎn):

1.簡單性

2.面向?qū)ο笮裕嫦驅(qū)ο蟮某潭瓤梢赃_(dá)到95%)

3.健壯性

4.跨平臺性

5.高性能(自動垃圾回收機(jī)制)

6.多線程

7.動態(tài)性

8.安全性

 

Java的缺點(diǎn):

1.效率低(毋庸置疑)

2.跨平臺是它最大的優(yōu)點(diǎn)也是最大的缺點(diǎn)

3.復(fù)雜性(做一個項(xiàng)目需要很多的知識,涉及面廣)

 

C#

C#是一種精確、簡單、類型安全、面向?qū)ο蟮恼Z言。

說到C#,就不得不先簡單介紹一下.net。到底什么是.net呢,按照微軟總裁兼首席執(zhí)行官Steve Ballrner把它定義為:.Net代表一個集合,一個環(huán)境,它可以作為平臺支持下一代Internet的可編程結(jié)構(gòu)。C#是.net的代表語言。 C#的特點(diǎn): 1. 完全面向?qū)ο蟆?nbsp;2. 支持分布式,之所以有C#,是因?yàn)槲④浵嘈欧植际綉?yīng)用程序是未來的趨勢,即處理過程分布在客戶機(jī)和服務(wù)器上。所以C#一出生就注定了能很好解決分布式問題。3. 跟Java類似,C#代碼經(jīng)過編譯后,成為了一種IL(中間語言)。在運(yùn)行時,再把IL編譯為平臺專用的代碼。 4. 健壯,C#在檢查程序錯誤和編譯與運(yùn)行時錯誤一點(diǎn)也不遜于Java,C#也用了自動管理內(nèi)存機(jī)制。 5. C#不像Java那樣完全摒棄了指針和手動內(nèi)存管理。C#默認(rèn)情況下是不能使用指針的,程序員在有必要時可以打開指針來使用。這樣可以保證編程的靈活性。 6. 安全性:C#的安全性是有.net平臺來提供的。C#代碼編譯后成為IL語言。是一種受控代碼,.net提供類型安全檢查等機(jī)制保證代碼是安全的。 7. 可移植性:由于C#使用類似Java的中間語言機(jī)制。使得C#也跟Java類似,可以很方便的移植到其他系統(tǒng)。在運(yùn)行時,再把中間代碼編譯為適合特定機(jī)器的代碼。 8. 解釋性:C#也是一種特殊的解釋性語言。9. 高性能:C#把代碼編譯成中間語言后,可以高效的執(zhí)行程序。10. 多線程:與Java類似,可以由一個主進(jìn)程分出多個執(zhí)行小任務(wù)的多線程。 11. 組件模式:C#很適合組件開發(fā)。各個組件可以由其他語言實(shí)現(xiàn)的,然后集成在.net中。 C#是在Java流行起來后所誕生的一種新的語言。由于微軟在操作系統(tǒng)上占有很大的優(yōu)勢。在以往的開發(fā)中累積了不少經(jīng)驗(yàn),所形成的.net平臺,所以C#在Windows方面可以說比Java具有更大的優(yōu)勢。如果單純從技術(shù)上來講,C#在網(wǎng)絡(luò)編程上可以與Java匹敵。C#還在Windows Forms也有一定的優(yōu)勢。 C#是一種非常類似于C++的語言,風(fēng)格是更接近于Java,不管是C++程序員還是Java程序員,都可以很方便的轉(zhuǎn)到C#上來。C#的強(qiáng)大是依賴于.net的發(fā)展,而.net的發(fā)展是看微軟在.net上的決心和投入有多少。從Windows 2003和Vista系統(tǒng)可以看出(前者內(nèi)置.net1.1,后者內(nèi)置.net2.0。).Net在Windows編程中具有重要的戰(zhàn)略意義。 C#目前主要是應(yīng)用在網(wǎng)絡(luò)編程上,其他領(lǐng)域比如數(shù)據(jù)庫、窗體編程,都逐漸在增大。

php

php的優(yōu)點(diǎn)1. 跨平臺,性能優(yōu)越,跟linux/Unix結(jié)合別跟Windows結(jié)合性能強(qiáng)45%,開發(fā)成本低,

PHP最經(jīng)典的組合就是:Linux + Apache + MySQL + PHP。非常適合開發(fā)中小型的web應(yīng)用,因?yàn)樯鲜秩菀祝蚤_發(fā)的速度比較快。而且所有的軟件都是開源免費(fèi)的,可以減少投入。

 比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)結(jié)合,或者數(shù)據(jù)應(yīng)用夠大可以考慮換 PostgreSQL或者Oracle,支持N種數(shù)據(jù)庫。(N >= 10)2. 語法簡單,入門快,如果有其它語言基礎(chǔ)的程序員二周左右的時間基本可以入門,并且跟asp有部分類似。有成熟的開發(fā)工具,比如NuPHPed,或者Zend Studio等等,再Linux平臺下可以使用Eclipse等等。3. 目前主流技術(shù)都支持,比如WebService、Ajaxxml等等,足夠應(yīng)用。4. 有比較完整的支持,比如使用ADODB或者PEAR::DB做數(shù)據(jù)庫抽象層,用Smarty或者smart template做模板層,如果是PHP 5.1的話,還能夠使用PDO(PHP Data Object)來訪問數(shù)據(jù)庫。5. 有很多成熟的框架,比如支持MVC的框架:phpMVC,支持類似asp.net的事件驅(qū)動的框架:PRado,支持類似Ruby On Rails的快速開發(fā)的框架:Cake等等,足夠滿足你的應(yīng)用需求。6. PHP 5已經(jīng)有成熟的面向?qū)ο篌w系,能夠適應(yīng)基本的面向?qū)ο笠蟆_m合開發(fā)大型項(xiàng)目。7. 有成熟的社區(qū)來支持PHP的開發(fā)。

8. 目前已經(jīng)很多大型應(yīng)用都是使用PHP,比如淘寶網(wǎng)、Yahoo、163、Sina等等大型門戶,很多選用PHP來作為他們的開發(fā)語言,所以大型門戶都能夠選用它,我想足夠能夠你的使用了。(據(jù)了解現(xiàn)在內(nèi)部都在逐漸轉(zhuǎn)向JAVA

9. 有很多開源的框架或開源的系統(tǒng)可以使用,比如比較知名的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客 WordPress,開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等,開源的SNS系統(tǒng)如UCHome、ThinkSNS等。PHP是解釋性的腳本語言,寫完代碼以后即可以執(zhí)行,不像c,java,c++等語言還需要去編譯執(zhí)行,相對來說比較節(jié)省時間。10.相對來說,PHP程序員的薪水的平均工資要比c,c++,java程序員的平均工資要低一些,特別是對于中小型企業(yè)來說可以節(jié)約一些成本。11.配置及部署相對簡單一些,對比JAVA開發(fā)來說,JAVA開發(fā)的配置就復(fù)雜多了,什么Structs、Spring、Hibernate、Tomcat等等很多地方都需要配置,甚至你在程序中每寫一個SQL語句都需要先在Hibernate中配置一下,有時重新部署一個class文件或jar文件還可能需要重啟Web服務(wù)器(Tomcat或Resin或其它的Web服務(wù)器)使新部署的庫文件生效。PHP開發(fā)中主要是PHP自身的配置文件及Web服務(wù)器的配置(如Apache或Nginx或Lighttpd等),相對于JAVA來說還是簡單一些,而且新修改了文件以后不需要重新啟動Web即可以立即生效。12.有很多開源的框架或開源的系統(tǒng)可以使用,比如比較知名的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客WordPress,開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等,開源的SNS系統(tǒng)如UCHome、ThinkSNS等。缺點(diǎn)

1.對多線程支持不太好,大多數(shù)時候我們只能簡單的模擬去實(shí)現(xiàn)的。

2.語法不太嚴(yán)謹(jǐn),比如變量不需要定義就可以使用,在c,Java,c++中變量是必須先定義以后才可以使用的。

3.也許有經(jīng)驗(yàn)的PHP程序員最感到痛苦的地方是PHP的解釋運(yùn)行機(jī)制。這種運(yùn)行機(jī)制使得每個PHP頁面被解釋執(zhí)行后,所有的相關(guān)資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內(nèi)存。在PHP中,所有的變量都是頁面級的,無論是全局變量,還是類的靜態(tài)成員,都會在頁面執(zhí)行完畢后被清空。以jsp為例,在JSP中,Java Bean的scope有四種有效值:Page、applicationsession、Request,分別對應(yīng)頁面、程序、會話、請求四種生存期。但在PHP中,只有Page一種生存期。 

Python

Python的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1.簡單————Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴(yán)格!Python的這種偽代碼本質(zhì)是它最大的優(yōu)點(diǎn)之一。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。

  2.易學(xué)————就如同你即將看到的一樣,Python極其容易上手。前面已經(jīng)提到了,Python有極其簡單的語法。

  3.免費(fèi)、開源————Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團(tuán)體分享知識的概念。這是為什么Python如此優(yōu)秀的原因之一——它是由一群希望看到一個更加優(yōu)秀的Python的人創(chuàng)造并經(jīng)常改進(jìn)著的。

  4.高層語言————當(dāng)你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。

  5.可移植性————由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無需修改就可以在下述任何平臺上面運(yùn)行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基于linux開發(fā)的Android平臺!

  6.解釋性————這一點(diǎn)需要一些解釋。一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個你的計算機(jī)使用的語言(二進(jìn)制代碼,即0和1)。這個過程通過編譯器和不同的標(biāo)記、選項(xiàng)完成。當(dāng)你運(yùn)行你的程序的時候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。而Python語言寫的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼 運(yùn)行 程序。在計算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機(jī)使用的機(jī)器語言并運(yùn)行。事實(shí)上,由于你不再需要擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫等等,所有這一切使得使用Python更加簡單。由于你只需要把你的Python程序拷貝到另外一臺計算機(jī)上,它就可以工作了,這也使得你的Python程序更加易于移植。

  7.面向?qū)ο蟆狿ython既支持面向過程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強(qiáng)大又簡單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>

  8.可擴(kuò)展性————如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們。

  9.可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

  10.豐富的庫————Python標(biāo)準(zhǔn)庫確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等等。

  概括————Python確實(shí)是一種十分精彩又強(qiáng)大的語言。它合理地結(jié)合了高性能與使得編寫程序簡單有趣的特色。

  規(guī)范的代碼————Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。

缺點(diǎn)

強(qiáng)制縮進(jìn)

  這也許不應(yīng)該被稱為局限,但是它用縮進(jìn)來區(qū)分語句關(guān)系的方式還是給很多初學(xué)者帶來了困惑。即便是很有經(jīng)驗(yàn)的Python程序員,也可能陷入陷阱當(dāng)中。最常見的情況是tab和空格的混用會導(dǎo)致錯誤,而這是用肉眼無法分別的。

單行語句和命令行輸出問題

  很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€.py文件。(對很多用戶而言這也不算是限制)

  NO.1 運(yùn)行速度,有速度要求的話,用C++改寫關(guān)鍵部分吧。

  NO.2 國內(nèi)市場較小(國內(nèi)以python來做主要開發(fā)的,目前只有一些 web2.0公司)。但時間推移,目前很多國內(nèi)軟件公司,尤其是游戲公司,也開始規(guī)模使用他。

  No.3 中文資料匱乏(好的python中文資料屈指可數(shù))。托社區(qū)的福,有幾本優(yōu)秀的教材已經(jīng)被翻譯了,但入門級教材多,高級內(nèi)容還是只能看英語版。

  NO.4 構(gòu)架選擇太多(沒有像C#這樣的官方.net構(gòu)架,也沒有像ruby由于歷史較短,構(gòu)架開發(fā)的相對集中。Ruby on Rails 構(gòu)架開發(fā)中小型web程序天下無敵)。不過這也從另一個側(cè)面說明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多。

perl

perl大勢已去,這里就不多說了。

重點(diǎn)來說說Go 語言

Go

以下僅僅代表筆者個人觀點(diǎn):

Go語言和Python 是目前的趨勢所向吧,雖然小編是從事JAVA開發(fā),但是現(xiàn)在依然在學(xué)習(xí)Python,有時間也會整下Go

為什么說Go 和Python是趨勢呢

先來說說Go語言:

Go優(yōu)點(diǎn):

1.部署簡單。Go 編譯生成的是一個靜態(tài)可執(zhí)行文件,除了 glibc 外沒有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和 Python 有著巨大的區(qū)別。由于歷史的原因,Python 的部署工具生態(tài)相當(dāng)混亂【比如 setuptools, distutils, pip, buildout 的不同適用場合以及兼容性問題】。官方 PyPI 源又經(jīng)常出問題,需要搭建私有鏡像,而維護(hù)這個鏡像又要花費(fèi)不少時間和精力。2.并發(fā)性好。Goroutine 和 channel 使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來的各種問題。單個 Go 應(yīng)用也能有效的利用多個 CPU 核,并行執(zhí)行的性能好。這和 Python 也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫起來并不簡單,而且由于全局鎖 GIL 的原因,多線程的 Python 程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫里的 multiprocessing 包又會對監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的 supervisor 管理進(jìn)程,對 fork 支持不好】。部署 Python 應(yīng)用的時候通常是每個 CPU 核部署一個應(yīng)用,這會造成不少資源的浪費(fèi),比如假設(shè)某個 Python 應(yīng)用啟動后需要占用 100MB 內(nèi)存,而服務(wù)器有 32 個 CPU 核,那么留一個核給系統(tǒng)、運(yùn)行 31 個應(yīng)用副本就要浪費(fèi) 3GB 的內(nèi)存資源。良好的語言設(shè)計。從學(xué)術(shù)的角度講 Go 語言其實(shí)非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設(shè)計是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎(chǔ)的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提高了團(tuán)隊協(xié)作的一致性。比如 gofmt 自動排版 Go 代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時候自動運(yùn)行 gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。3.執(zhí)行性能好。雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。

對于GO語言,一直存在爭論,很多人善于利用GO語言進(jìn)行開發(fā),但并不是所有的人都喜歡Go語言,我們這個世界真的需要另外一種C語言風(fēng)格的編程語言嗎,go語言可以做什么?優(yōu)勢在哪里?

  go語言可以做什么?

  根據(jù)谷歌著名的軟件工程師——Go語言的設(shè)計人之一——Rob Pike的說法,它是用來開發(fā)”大型軟件“的。

  Pike說Go語言適合于”很多程序員一起開發(fā)的大型軟件,并且開發(fā)周期較長,支持云計算的網(wǎng)絡(luò)服務(wù):簡言之,就是服務(wù)端軟件。Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性。“(作為原貝爾實(shí)驗(yàn)室Unix開發(fā)小組成員,Pike對系統(tǒng)軟件有相當(dāng)?shù)恼J(rèn)識。)GO語言可以做什么  但對于其它類型的軟件,Go語言也一樣的好用。例如,我在Google+上詢問了Go語言的使用者,得到了Douglas Fils的回復(fù),他正在拿各種語言做實(shí)驗(yàn)。

  Fils說他現(xiàn)在有時會開發(fā)一些Web應(yīng)用程序,大多數(shù)都是在Java虛擬機(jī)(JVM)平臺上。“所以Java自然是最常用的。我最近開始嘗試更多的語言,例如Scala和Groovy。我用Groovy語言已經(jīng)開發(fā)了不少的東西,而且剛剛完成了一個Groovy/Grails語言上的大型項(xiàng)目。我還研究了一下Ruby on Rails/Python(Python框架),并用它們做了一些東西。”

  他說他用早期版本的Go語言開發(fā)了一個Web界面來處理數(shù)據(jù)資源。但很不幸。“當(dāng)時的Go的程序庫和語法使得開發(fā)起來很困難。我還嘗試了node.js,而且,到了一月份,我的精力完全轉(zhuǎn)向了node.js.”

  Node.js,F(xiàn)ils 說,很流行,“雖然我很喜歡它,但它的單線程事件循環(huán)機(jī)制和非阻塞的編程模式讓我不太滿意。還有,所有的東西都要用Javascript的回調(diào)函數(shù),我不喜歡這樣。”很顯然,他不是一個JavaScript的粉絲。Go語言的語法和結(jié)構(gòu),從另一方面講,“還是很簡潔的。”

  當(dāng)Go語言的語法和結(jié)構(gòu)趨于穩(wěn)定,并發(fā)布了Go 1時,他覺得應(yīng)該轉(zhuǎn)回來,重寫他的Go語言程序。這回,他想起來了當(dāng)初為什么想用Go來開發(fā)。

  優(yōu)勢在哪里?

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

  并發(fā)性好。Goroutine 和 channel 使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來的各種問題。單個 Go 應(yīng)用也能有效的利用多個 CPU 核,并行執(zhí)行的性能好。這和 Python 也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫起來并不簡單,而且由于全局鎖 GIL 的原因,多線程的 Python 程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫里的 multiprocessing 包又會對監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的 supervisor 管理進(jìn)程,對 fork 支持不好】。部署 Python 應(yīng)用的時候通常是每個 CPU 核部署一個應(yīng)用,這會造成不少資源的浪費(fèi),比如假設(shè)某個 Python 應(yīng)用啟動后需要占用 100MB 內(nèi)存,而服務(wù)器有 32 個 CPU 核,那么留一個核給系統(tǒng)、運(yùn)行 31 個應(yīng)用副本就要浪費(fèi) 3GB 的內(nèi)存資源。

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

  執(zhí)行性能好。雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。

總結(jié):

       很多時候,一種語言的優(yōu)點(diǎn)很可能是它的缺點(diǎn),缺點(diǎn)又可能是它的優(yōu)點(diǎn)。這主要看你是從哪方面去考慮。這就印證了那句話,凡事沒有必然。

       不管是哪種語言,就像文章開頭所言,只要你采用他達(dá)到你想要的,那就成功了。無需過多在意它的缺點(diǎn),更無需贊揚(yáng)它的優(yōu)點(diǎn)。所以網(wǎng)上那些關(guān)于哪種語言更好的口水仗,我只能說這樣的爭斗毫無意義。

       語言只是工具,沒有好壞之分。

PS:后續(xù)出現(xiàn)新的流行語言,博主會再更新的,未完待續(xù)...


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吕梁市| 永川市| 霍山县| 太白县| 新民市| 仙游县| 建瓯市| 三门县| 兴安县| 长丰县| 平武县| 敦化市| 通化市| 安庆市| 尼玛县| 哈巴河县| 沛县| 凉城县| 建宁县| 新平| 建始县| 开封县| 金山区| 和平区| 溆浦县| 海兴县| 南投县| 横山县| 木兰县| 普宁市| 晴隆县| 密山市| 湛江市| 鲁甸县| 桃园县| 阳高县| 义马市| 裕民县| 桐城市| 汤阴县| 清原|