4種速度最慢的動態(tài)編程語言,你一定用過
編程語言已經(jīng)存在很多年,每種語言都是為了滿足特定的需要而構(gòu)建的。
到今天為止,全世界大約有700種編程語言?,F(xiàn)在僅剩250種語言能存續(xù)下來,其余的基本上已經(jīng)被編程社區(qū)拋棄了。
對于程序員來說,性能一直是一個必須考慮的問題。在過去,程序的運(yùn)行時間可以用天數(shù)來衡量,而現(xiàn)在,歸功于科技的進(jìn)步,僅需幾秒鐘即可完成運(yùn)行。
計(jì)算機(jī)進(jìn)化的速度遵循摩爾定律:
摩爾定律
在電子學(xué)中,速度和性能轉(zhuǎn)化為一個特定芯片可以擁有的晶體管數(shù)量。根據(jù)摩爾定律,這個數(shù)字每隔兩年就會往上翻一番。這就是為什么你的手機(jī)比1990年代的房間大小的超級計(jì)算機(jī)快得多。
回到計(jì)算機(jī)科學(xué),速度快的代碼和速度快的電腦是有區(qū)別的。速度慢的程序和速度慢的電腦也是有區(qū)別的。雖然我們很多人無法影響計(jì)算機(jī)硬件的運(yùn)行速度,但是代碼的快慢卻是我們可以控制的。
在開發(fā)時,我們往往都要考慮一個因素,那就是語言期望。每種語言的實(shí)現(xiàn)方式都不同,因此每種語言都有各自的優(yōu)點(diǎn),可能很少人會把程序的運(yùn)行速度納入語言的編程優(yōu)點(diǎn)之中。
如果你正在做游戲類的項(xiàng)目,或者是需要繁重的數(shù)學(xué)計(jì)算等高要求的任務(wù),最好不要用運(yùn)行速度太慢的編程語言。
一般來說,編程語言有兩種類型:
- 靜態(tài)類型編程語言
- 動態(tài)類型編程語言
靜態(tài)類型語言通常是編譯的,意思就是編譯器的程序會解析并將整個類似英語的代碼轉(zhuǎn)換為匯編語言,并生成一個新文件,這個文件可以由用戶手動運(yùn)行。
動態(tài)類型語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說,在用動態(tài)類型的語言編程時,永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會在你第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來。
大多數(shù)人喜歡動態(tài)類型語言。諸如Python之類的不易出錯且易于人工解釋的語言。但這是有代價的,那就是要犧牲運(yùn)行速度。
在本文中,我們將列出4種相對最慢的常見動態(tài)類型編程語言。
1. Perl
如果你以前用過 UNIX,那么一定見過 Perl 腳本。因?yàn)榇蠖鄶?shù) UNIX 文件都是 Perl 格式。
Perl 是一種 Unix 腳本語言。它是為了減輕程序員不得不忍受編碼冗長的 Shell 程序的困難而創(chuàng)建的,Perl 就是把很多 Shell 命令塞進(jìn)了一個文件中。
更重要的是,Perl 還可以用來完成在 C 和其他 Unix 語言中難以完成的任務(wù)。
Perl 在運(yùn)行速度方面的確令人頭疼。
另外,現(xiàn)在想找到一個優(yōu)秀的 Perl 程序員就像試圖大海撈針。這是因?yàn)?,與 Python 不同,Perl 對實(shí)現(xiàn)非常敏感,每個操作符都必須在合適的位置上才能擁有一個相對高效的程序。
即使有最高效的實(shí)現(xiàn),Perl 仍然落后于其他的高級編程語言。但是,在2019年,一個版本名為 Raku 的 Perl 6發(fā)布之后,Perl 的速度問題正在一個又一個被解決。
2. PHP
PHP 是一種腳本 Web 開發(fā)編程語言,通常在網(wǎng)站部署中補(bǔ)充 HTML、CSS 和 MySQL。
許多人認(rèn)為 PHP 已經(jīng)過時了,但事實(shí)并非如此。
有研究表示:在我們知道服務(wù)器端編程語言的所有網(wǎng)站中,有79.0%的網(wǎng)站都使用了 PHP。
除此之外,在關(guān)于編程、腳本和標(biāo)記語言的“ 2020 StackOverflow ”調(diào)查報告中,展示了 PHP 依然是一種非?;钴S的語言,排名在 C++和 Typescript 之上:
但是,由于 PHP 的學(xué)習(xí)曲線是漸進(jìn)的,而且托管成本低,因此在性能方面會有所缺失。
PHP 的速度非常慢,因?yàn)槿鄙賹?shí)時編譯 (JIT 編譯器),而且它是一種動態(tài)類型語言。很幸運(yùn)的是,在 2020 年 11 月 26 日,PHP 8 推出了一個性能優(yōu)化功能:內(nèi)置的 JIT 編譯器。
內(nèi)置的 JIT 編譯器幫助 PHP 在速度和性能方面接近其他同類編程語言。
3. Ruby
Ruby的官方作者 Yukihiro Matsumoto 曾說:
Ruby 旨在讓程序員滿意。 |
Ruby 是一種面向?qū)ο蟮木幊陶Z言,一切都可以被解釋為對象。這使得它成為一個容易使用的工具。只需要動動手指,任務(wù)就能完成。
但是,在性能方面,Ruby 是一種典型的解釋語言。由于解釋語言是逐句運(yùn)行代碼語句,因此與使用編譯器的語言相比,它們往往比較慢。
Ruby 的速度在全局解釋器鎖 (GIL)中再次被砍,因?yàn)樵撜Z言每次只能允許使用一個線程使用 GIL。
最后,Ruby 的速度還受到高內(nèi)存消耗和垃圾收集慢的影響。
4. Python
在很多編程語言的排行榜中,Python 排名第一,成為最受歡迎的編程語言。它大量用于數(shù)據(jù)科學(xué)、Web 開發(fā)和人工智能等。
這里不是夸大 Python,因?yàn)樗膬?yōu)點(diǎn)多于缺點(diǎn)。但就目前情況來說,Python 的速度依然是個問題。
Python 和 Ruby 是相同屬性的編程語言。由于 GIL 和使用解釋程,兩者速度都很慢。它們的主要區(qū)別在于前者以數(shù)據(jù)科學(xué)為主,而后者更傾向于 Web 開發(fā)。
但是,Python 有很多強(qiáng)大的庫和功能支持。其中一些庫和功能,如 Numpy 模塊和 Filter() 內(nèi)置函數(shù),可以在C++中實(shí)現(xiàn),從而在性能方面得到了顯著的提升。這就是為什么Python現(xiàn)在正在迅速超越其他編程語言的原因。
最后
雖然在軟件實(shí)現(xiàn)方面,速度和性能是需要考慮的重要因素,但不應(yīng)將責(zé)任僅僅歸咎于編程語言。
實(shí)際上,造成速度和性能問題的根本原因是糟糕的程序?qū)崿F(xiàn)和代碼設(shè)計(jì)。
盡管動態(tài)類型語言的速度很慢,但它們提供了很好的編程體驗(yàn),并提高了工作效率。所以,很多事情都有兩面性,編程語言也是如此。