很多人的電腦屏幕上都會(huì)有一個(gè)顯示CPU占用率的小球(當(dāng)然也可能是其他形狀,很多人是在下載諸如360等安全軟件中帶的),很多人在看到數(shù)字彪紅的時(shí)候會(huì)很受不了,想要馬上清理內(nèi)存。如今,節(jié)能不僅僅是硬件問題,編程語言的選擇也可能會(huì)對(duì)能源消耗產(chǎn)生嚴(yán)重影響,本文我們將深入了解編程語言的能源效率。
多年來,我們將性能與處理時(shí)間結(jié)合在一起。“它有多好?”的意思是“它有多快?”,開發(fā)人員、工程師甚至消費(fèi)者都會(huì)做很多工作,以避免CPU的重大耗盡,保護(hù)其電池,能源效率從硬件開始逐漸轉(zhuǎn)化為軟件開發(fā)。
當(dāng)嘗試衡量編程語言的效率時(shí),會(huì)出現(xiàn)很多問題,比如,你使用什么來度量? 編寫的程序更快,語言就更節(jié)能、更有效率嗎? 更快的編程語言是更環(huán)保的嗎?比較編程語言之間的效率是困難的。語言的性能可以通過其編譯器或虛擬機(jī)的質(zhì)量輕松改善,改進(jìn)源代碼與優(yōu)化庫一樣重要。
但是,一組葡萄牙研究人員做到了。他們研究了27種最流行的編程語言,以查看速度和效率之間是否存在關(guān)系。研究團(tuán)隊(duì)通過使用計(jì)算機(jī)基準(zhǔn)測(cè)試,使用最先進(jìn)的編譯器、虛擬機(jī)、解釋器和庫來編譯/執(zhí)行程序測(cè)試這些編程語言。然后,他們分析了不同編程語言實(shí)現(xiàn)之間的性能,整個(gè)過程考慮了三個(gè)變量:執(zhí)行時(shí)間,內(nèi)存消耗和能耗。
研究發(fā)現(xiàn):速度并不等效于能源效率。比如C、C ++、Rust和Ada這樣的編譯語言被列為一些最節(jié)能的語言。Java是面向?qū)ο笳Z言中速度最快,效率最高的語言之一。解釋性編程語言,如Perl,Python和Ruby是最不節(jié)能的。研究人員發(fā)現(xiàn),基于CPU的能源消耗總是占能源消耗的大部分。
平均來說,如果按照編程范例進(jìn)行排序,命令式語言需要最少的內(nèi)存,其次是面向?qū)ο?、函?shù)式,最后是腳本語言。
那么,是否可以綜合能源消耗、時(shí)間和內(nèi)存使用選擇一種編程語言呢? 當(dāng)然可以,C語言是所有領(lǐng)域的明顯贏家。但如果你對(duì)C語言編程不感興趣,那么有一些有趣的選擇。
Go和Pascal在效率測(cè)試中做的相當(dāng)差,但如果你只是考慮基于能源消耗和內(nèi)存,他們會(huì)做得很好。對(duì)于有興趣改善能源和內(nèi)存的人,Rust和FORTRAN也是不錯(cuò)的選擇。
測(cè)試代碼真正的效率
研究人員在GitHub上貢獻(xiàn)了一個(gè)項(xiàng)目(開源地址:https://github.com/greensoftwarelab/Energy-Languages),可以用來評(píng)估你的代碼,看它是否高效,只需要三個(gè)簡(jiǎn)單的步驟:
創(chuàng)建一個(gè)名稱為“基準(zhǔn)”的文件夾,例如test-benchmark,在你實(shí)現(xiàn)的編程語言里面。
按照操作部分中的說明,填寫Makefile。
使用compile_all.pyscript來編譯,運(yùn)行或測(cè)試你想要的內(nèi)容!或者使用make命令運(yùn)行它。
你怎么看這一項(xiàng)研究,會(huì)改變你對(duì)編程語言的選擇嗎?