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