六星云課堂:各類編程語言大比拼,誰才是真正的王者!

最近加入一個使用Go語言的項目組,由于此前對Go語言的了解還停留在理論認識的階段,沒有大型項目的經(jīng)驗,加入這個項目組讓我算是真正體驗了一把Go語言,職業(yè)技能樹也更加豐富了起來。
Go語言的很多語言特性讓人耳目一新,而最讓我感到震撼的莫過于Go語言服務(wù)開發(fā)流程的簡單便捷,通過Go Build出來的二進制文件,發(fā)布到服務(wù)器后,直接就可以運行。

相比C/C++語言出來的二進制文件來說,無需管理一大堆依賴、處理各種動態(tài)庫、靜態(tài)庫等等的問題,且C/C++語言的開發(fā)流程,如果是和性能平臺相關(guān)的程序,光是開發(fā)環(huán)境、編譯環(huán)境就能夠折騰個人幾天,相比之下,Go語言的開發(fā)流程讓人感覺舒服。
當然了,我也不是無腦鼓吹Go語言,在Go語言的使用過程中也有一些不解和疑惑,為此也專門橫向地對比了一下自己熟悉的語言:Java、C/C++、Python,主要是后臺的語言。
開發(fā)環(huán)境
就開發(fā)環(huán)境而言,Go語言是最讓人省心的;當然Java也很省心,只需要在本地和生產(chǎn)環(huán)境分別安裝了JDK,其他基本和Go類似了,Java由于JVM中間層可以隨處運行,Go的二進制可能需要根據(jù)二進制平臺重新編譯,但是現(xiàn)在主流的平臺基本都已經(jīng)統(tǒng)一了Linux版本,所以Go語言二進制我目前是沒有遇到需要分別編譯的情況。
C/C++、Python的開發(fā)環(huán)境就有點一言難盡了,先說Python,雖然Python使用簡單,但是長久依賴歷史版本2.x和3.x相互不兼容以及各種依賴包的問題,也是讓很多開發(fā)者感到困擾,雖然有pyenv等環(huán)境治理的工具,為混亂的環(huán)境治理隔離出一片寧靜之地。但是,只能說沒有對比就沒有傷害。
再說C/C++,由于是和平臺強相關(guān)的語言,所以就鏈接庫、路徑、符號表等等,都和底層操作系統(tǒng)的關(guān)聯(lián)更加密切一些,對開發(fā)者的要求也相對更高,但即使是優(yōu)秀的開發(fā)者,也時常得被C/C++搞得焦頭爛額,特別是涉及對別人的依賴的時候,由于編譯時的平臺、依賴等等,部分函數(shù)的符號信息不一致、菱形依賴等問題是最難搞定的,大型的C/C++項目需要強大的專業(yè)的團隊進行環(huán)境治理。
運行性能
性能這個老生常談了,其實就現(xiàn)在的開發(fā)而言,服務(wù)對性能的要求已經(jīng)沒有前輩們的那個時代那么高了,此前看過小時候玩的那些馬里奧、魂斗羅等的游戲的實現(xiàn),看他們是如何把圖片素材、邏輯壓縮到128k、64k的卡帶內(nèi)存里面,真的是精益求精。
今天就服務(wù)而言,即使對于大流量的服務(wù),往往在追求極致性能和成本之間,更多的會選擇擴服務(wù)、加機器來支撐起相關(guān)容量的服務(wù);當然,不是說性能不重要,而是說在今天,性能的問題已經(jīng)可以從更高的維度或者說從更多的維度解決了。
就具體語言的性能,沒有對C/C++、Go語言的進行過壓測,但從原理上來說,兩者相差應(yīng)該不大,而對于Java、Python,兩者都有虛擬機,但是Python是解釋型語言,Java雖然是由中間層,但是也有JIT技術(shù)的加持,性能也是更上一個臺階,但Java的GC問題和Stop The World的機制,也使得一些服務(wù)不會選擇Java。
橫向?qū)Ρ葋碚f,各種語言就開發(fā)環(huán)境、運行性能而言,都有他們的特點,也各有長處、各有短板,這也使得這些語言在不同場景下,會有不同的使用頻率。
Java、Python、Go、C/C++這幾門語言,主要的應(yīng)用都在后端開發(fā)這里,雖然后端開發(fā)是一個比較明確的方向,但也依然可以有很多細分的領(lǐng)域,不同領(lǐng)域常使用的語言也依然有很大的差別。
以上就是本次分享的全部內(nèi)容,想學習更多編程技巧,歡迎持續(xù)關(guān)注六星云課堂!