從能源效率來看:Python比C++慢了57倍

眾所周知,編程語言的“快”體現(xiàn)在編譯和執(zhí)行效率。但是哪種編程語言又快又節(jié)能?這是個(gè)有趣的問題,因?yàn)橥ǔi_發(fā)者并不會(huì)考慮編程語言的“節(jié)能”問題。然而,在開發(fā)者世界中,還真的有專業(yè)機(jī)構(gòu)和人群對這樣的問題做過研究。
2017年,計(jì)算機(jī)協(xié)會(huì)ACM SIGPLAN工程語言學(xué)術(shù)會(huì)議上發(fā)表了一篇論文《跨編程語言的能源效率:能源、時(shí)間和內(nèi)存有何關(guān)系?》,文中測試了當(dāng)今使用的多種最流行的編程語言,以確定其消耗的能源量等。結(jié)果表明,盡管Python很受歡迎,但它執(zhí)行程序時(shí)消耗的能量達(dá)到4390焦,是 C++ 77焦的57倍。其他能耗最高的編程語言還包括Perl、Ruby和Lua。

這些測試當(dāng)時(shí)是使用英特爾的RAPL工具進(jìn)行的,該工具可供顯示英特爾CPU的能耗指標(biāo),在當(dāng)時(shí)是一個(gè)不錯(cuò)的選擇。盡管五年后論文作者基于ARM芯片進(jìn)行了后續(xù)測試,但排名結(jié)果幾乎沒有變化。結(jié)果表明,C語言是最快、最節(jié)能的編程語言;前五的編程語言在能效、速度和內(nèi)存使用上都占優(yōu);編譯型語言總是優(yōu)于解釋型語言。
Python是一種典型的解釋型語言,不同于Ada、C++和Rust等編譯型語言直接將代碼轉(zhuǎn)化成機(jī)器指令,Python必須首先由單獨(dú)的程序讀取,然后才能翻譯為機(jī)器指令。解釋型語言通常更容易學(xué)習(xí)和使用,但這是以更低的能效為代價(jià)的。
Python在許多領(lǐng)域都非常受歡迎,不僅僅是人工智能方面,其在金融領(lǐng)域也非常普遍。例如,投資公司英仕曼集團(tuán)就將其稱為公司的“第二語言”。事實(shí)上大多數(shù)銀行都喜歡使用高替代性的解釋語言,比如高盛內(nèi)部對專有編程語言Slang的熱情是有據(jù)可循的。同樣的現(xiàn)象在金融科技領(lǐng)域非常普遍,例如Stripe嚴(yán)重依賴 Ruby,而Ruby的速度僅比Python快一點(diǎn)。

C++可能“對環(huán)境很友善”,但對其開發(fā)人員卻并非友善。C++本質(zhì)上很難使用,這往往決定了精通掌握C++的開發(fā)人員對于類似對沖基金和高頻交易的金融企業(yè)等領(lǐng)域有著非常大的價(jià)值。另一方面,Rust同樣具備較好的能源效率,但是它使用起來能夠讓程序員感到更加輕松愉悅一些。然而,除了一些加密貨幣之類的角色之外,Rust在諸如金融等大型領(lǐng)域缺乏影響力。
最奇特的是Java,能效前五中唯一不是純編譯型語言。使用虛擬機(jī)JVM運(yùn)行應(yīng)用程序的Java語言似乎是一個(gè)特例。
文/水哥