編程語言的評測 性能和靈活性的最佳平衡
在計算機評測基準中,評測者為了盡量讓評測準確,非常謹慎的選擇了13個基準程序,這13個基準程序并不針對某以特定語言有特殊的優(yōu)化。對于評測選擇33中語言都實現(xiàn)了13個基準程序。當然,除了速度這個指標外,程序基準評測同時也為每一個基準測試程序發(fā)布一個編碼大小指標。非常感謝基準評測讓我們看到程序設計中非常重要的一個方面:程序語言的性能和程序語言靈活性之間的矛盾。正是這個矛盾給所謂“高級編程語言”帶上一個含蓄的輕蔑的意思。即,當你在使用這些高級語言編碼時,你也許可以編寫出漂亮的代碼,但是你是如此的遠離了硬件,你不可能獲得更好的性能,是這樣的嗎?
如果我們將基準測試程序的結(jié)果放在一張XY的圖表上,那么我們就可以為這張表的4個角命名。快速而復雜的語言應積聚在圖表的左上角。我們把這類語言稱為系統(tǒng)語言。簡潔但慢速的語言應該聚集在右下角,我們稱之為腳本語言。在右上角,應該是過時的語言。除非這些語言具有非常吸引人的特性,否則語言已經(jīng)被新出現(xiàn)的語言所淘汰。***在左下角,基本上找不到對應的語言,因為在這一區(qū)域的語言是理想狀態(tài)的語言。在這個區(qū)域的語言是又快又短又利于使用的語言。
圖中每一個小點就代表一種語言的一個基準程序?qū)崿F(xiàn),因此這圖里面共有429個點,每個點的XY軸分別代表了其和***的語言實現(xiàn)差距的倍數(shù)(從語言的復雜性和語言執(zhí)行性能來說),其中一些點比較分散,我們就沒有在圖中畫出。從上面這個圖我們可以看到這些粉紅色點沿著Y軸(復雜性)比X軸(執(zhí)行性能)分布更統(tǒng)一,這是不是意味著,人類在提升語言表達的靈活性上還在穩(wěn)步的不斷進步,而在提升語言性能方面卻遇到了很多的麻煩呢:)
針對每一個種語言,比如說scala語言,我們用下面的圖來描述:圖的中心點,是這個語言測試結(jié)果的平均值,然后做每一個評測結(jié)果的具體值到這個均值的連線就夠成了一個星型圖。這個圖說明了scala一些特性,在X軸性能上來說,大部分點都分布在靠近左邊,說明scala的性能是不錯的,如果優(yōu)化JVM的話,scala可以大部分提高性能,但是scala性能分布并不一致,其中的一個點甚至到了最右邊。就語言復雜性(Y軸)來說,scala的表現(xiàn)也不錯,不過有時候為了獲得高性能,也會導致語言復雜提高,比如scala的其中一個點就在最頂端。(有關(guān)Scala語言的更多介紹,可參考Java以外的選擇 Scala編程語言簡介)
通過為每一種語言形成如上的一個圖,我們***可以為這33種語言評的測結(jié)果形成了如下的一個圖,這是一個6*6的圖。其中每一個小圖具有同樣的軸和同樣的精度。這張圖的目的是為了方便的比較每一個語言的星型。這些圖按語言的平均性能來組織列,最左邊的語言的性能***,最右邊的語言性能最差,在每一列中的語言又按照平均的語言代碼量(復雜程度)進行排列,代碼量最小的語言在***端,代碼量***的在最頂端。
點擊看大圖
在圖的最左邊的性能是***的,又高又瘦的星型,我們可以看到,除了GCC和G++外,其他的性能都顯示了驚人的一致性(每一個基準測試程序的性能都非常接近)。而JAVA也非常驕傲的出現(xiàn)在一組中,這說明經(jīng)過了10年的優(yōu)化后,Java運行時的性能已經(jīng)得到長足的提高(要用Java做大系統(tǒng)的人是否還會猶豫呢:))。
在圖的右邊,我們看到了一些又胖又矮的星型,這些是一些腳本語言,從圖中可以看出,這些腳本語言社區(qū)的人們當他們在不斷改善他們語言的表達性的同時并沒有花大力氣在性能的改善上。然而也有例外,Lua這門腳本語言就有很好的執(zhí)行性能。
【編輯推薦】