最近看到一個有趣的編程語言研究,它把27種編程語言放到一起做了一個基準測試。
一般的基準測試無非是看看哪個編程語言最快,而這個研究還要看看誰消耗的能量最高。
其中的一個結(jié)果讓人震驚,Python竟然比C慢71倍,消耗的能量居然是C的75倍!
這個研究是葡萄牙的一個研究所做的,他們用了一個叫做“The Computer Language Benchmarks Game”測試集。
這個測試集很有趣,既包括程序員熟悉的“二叉樹遍歷”,也包括“N體問題”這樣的天體運動模擬,目的是盡可能多地覆蓋到更多領域。
對于程序的運行時間很好計算,記錄下開始時間和結(jié)束時間,相減就出來了。
對于程序的能耗,他們使用了Intel的RAPL(Running Average Power Limit),這是一種硬件功能,可以監(jiān)控CPU、內(nèi)存、GPU能耗,然后通過API來訪問。
整體的程序框架大概是這樣:
for (i = 0 ; i < N ; i++){
time_before = getTime (...);
rapl_before (...);
// 使用system系統(tǒng)調(diào)用來執(zhí)行程序
// 例如system("/usr/bin/python binarytrees.py")
system(command);
rapl_after (...);
time_elapsed = getTime (...) - time_before ;
...
}
最終的結(jié)果是這樣的(經(jīng)過了標準化的處理):
在速度上,不出意料,C語言最快,以它為基準,Python是71.90,Lua最慢。
在能量消耗上,C語言最低,以它為基準,Python是75.88,Perl最差。
在內(nèi)存占用上,Pascal這門語言竟然排到了第一,C語言屈居第三。
從運行速度,能量消耗、內(nèi)存使用這三項指標上都能看出C語言的王者之氣。
運行速度最快的編程語言:C、Rust、C++、Ada、Java,在節(jié)能榜也名列前茅。
可以看出編譯型的語言性能確實厲害,Java的虛擬機被優(yōu)化得也非常強悍。
而解釋型語言PHP、Lua、Ruby、Python、Perl等就排名靠后了。
讓人吃驚的是Lisp,執(zhí)行速度靠前,消耗能量之少也名列前茅。
那么,這個結(jié)果的可信度如何呢?
The Computer Language Benchmarks Game測試集合有個特點:充分利用了編程語言的特性,致力于讓程序運行得最快。
這在真正的實踐中是不現(xiàn)實的,因為大部分程序員都不會這么寫代碼的。
所以研究團隊找了一個叫Rosetta Code的測試集合,再次對結(jié)果進行驗證。
Rosetta Code的特點是是對同一個編程任務,有幾百種編程語言的實現(xiàn)!
由于它的目標不是優(yōu)化程序,而是為了展示不同編程語言的相似之處和不同之處,讓學習者能快速地學習另外一種編程語言。
他們從中選了9個任務的代碼,再次進行了測試。
結(jié)果和之前差不多,C、Pascal、Ada、Rust、C++ 依然排在前面幾位,Ruby、Perl、Python依然排在最后。
唯一的例外是Java,排名大幅下降,因為在Rosetta Code的實現(xiàn)中,大量使用了Java集合(如List和Set),而不是靜態(tài)的數(shù)組,從而拖累了Java的性能。
總結(jié)
看完這個研究,你有什么感想?
我想說,如果你是一個環(huán)保主義者,覺得應該對氣候變暖負責任,根據(jù)這個研究結(jié)果,那你一定得選擇C語言來編程!
但是呢,這個研究只關注編程語言在運行時的表現(xiàn),它不考慮軟件的編寫成本、維護成本。
C語言和硬件密切相關,是個“低級”的高級語言,想寫出好代碼不容易。
想用它寫出和Java、Python同樣功能的程序,花費的時間要長得多,電腦開機的時間也要長得多,這么算下來,用C語言消耗的能量可能遠遠超過Java和Python。
對于系統(tǒng)級的軟件和對性能要求高的軟件,C、C++、Rust是不二之選,對于應用層的軟件,需要快速實現(xiàn)多變的業(yè)務邏輯,還是選擇Python、Java、JS、Ruby等編程語言吧,適合的才是最好的!
原論文鏈接:https://haslab.github.io/SAFER/scp21.pdf
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.