為什麼有些程式語言比其他語言快?

有很多程式語言。它們都有各自的怪癖,用於不同的事情。但是是什麼讓一種程式語言比另一種程式語言更快呢?...

現在有很多編程語言,每種語言都有自己的特點。由於不同的設計選擇和用例,有些比另一些更快或更慢。當然,這種速度(或缺乏速度)通常是有代價的。簡單地說,正是這些差異導致了這些性能變化。

programming-languages-speed

什麼是程序設計語言(a programming language)?

不管編程語言看起來如何,它們仍然在做同樣的事情:讓你的計算機做一些事情。所有的代碼行最終都被翻譯成一系列模糊的數字(也稱為機器代碼)。可以說,所有編程語言(包括彙編語言,它將數字映射到可讀的字)都是為了使創建軟件更容易。

assembly

這些語言可以通過它們為程序員所做的抽象級別來分類。基本上,這就是語言本身要處理多少事情,在較低的級別上需要手動處理的事情。這往往使高級語言更容易編程,因為要學習和記憶的東西少了一點。

內存管理就是一個例子。對於一些抽象程度較低的語言,程序員必須手動說出手頭的任務需要多少RAM,然後在任務完成後釋放它。如果他們不這樣做,或者發生了一些他們沒有考慮到的事情,那麼內存使用量可能會越來越大。像Java這樣的高級語言會自動完成這項工作。

自動化成本

也就是說,使用高級語言肯定有一些缺點。即速度。有時,程序員控制的範圍越廣,程序的效率就越低。

例如,具有自動內存管理(通常稱為垃圾收集)的語言可能比不實現此功能的語言慢。這是因為程序需要時間來遍歷自身,並以特定的間隔清除內存。

garbage collection

編譯:您的里程數可能會有所不同

一般來說,用C語言和C++語言編寫的程序比大多數程序都快。大多數操作系統都是使用它們編寫的,還有一些甚至更低級別的彙編代碼。其中一個主要因素來自於它們被編譯(與被解釋相比)。

這意味著在運行之前,程序的源代碼首先被翻譯成一個較低的級別:機器代碼。生成的產品稱為二進制文件(例如DLL文件),它們與相關文件鏈接在一起,使它們工作,從而創建所謂的可執行文件。

binaries

然而,這樣做的一個缺點是實際編譯此類程序所需的時間。像mozillafirefox這樣的大型瀏覽器可能需要半個小時左右的時間。幸運的是,現在的大多數軟件都提前完成了這個過程,使得安裝和使用變得更加容易。

由於最終結果是用一種計算機可以直接理解的語言編寫的,所以速度往往相當快。將其與經過另一個步驟的解釋語言進行比較。儘管如此,並不是所有的編譯語言都是相同的。

編譯器效率

為了把任何一種代碼翻譯成計算機能理解的東西(機器代碼),它需要通過一個叫做編譯器的特殊程序來運行。一種語言可以有多個編譯器。例如,GCC(GNU編譯器集合)和Clang都可以用來編譯用C編寫的程序。

既然編譯器的工作是將程序翻譯成機器代碼,那麼它的翻譯效果會在一定程度上影響它的速度。例如,根據編譯器的配置方式,同一個源代碼的結果可能略有不同。

gcc compiler

這也意味著不同的編譯語言可以比其他語言執行得更快或更慢。一般來說,C和C++被認為是非常快的,因為它們的編譯器已經經歷了多年的發展和改進。其他語言並不總是那麼成熟。

解釋語言:又一步

如前所述,解釋語言不是預先編譯的。相反,它們是在運行時被翻譯的,通常由一個稱為解釋器的獨立程序來翻譯。例如,Java程序通過JVM(Java虛擬機)運行。

因為這些語言不需要事先編譯,所以用它們編寫的程序通常更容易**和測試。然而,其結果是,軟件本身的速度會明顯減慢。解釋器逐行執行程序的源代碼,這會導致速度損失。除此之外,解釋器本身也需要一點時間來啟動。

字節碼:一個小小的妥協

由於其較慢的特性,許多解釋語言實際上使用某種形式的編譯來加速其性能。在運行之前,這些程序會被翻譯成字節碼,這是一種易於口譯員使用的語言。例如,Java和Python在運行之前都會這樣做,分別創建類和PYC文件。

java bytecode

基本上,這是在開發的易用性和速度之間的一種折衷。它比僅僅解釋代碼更快,而且比完全編譯的代碼更容易設置。字節碼還有一個額外的好處,就是與編譯成機器碼的程序相比,字節碼的可移植性更強。如果CPU架構存在解釋器,它將運行。

在某些語言中,還有一種稱為JIT(just-In-time)編譯的方法。基本上,它接受字節碼並將其編譯成機器碼。顧名思義,這是在程序運行時發生的。它的目的是加快執行速度,但代價是第一次啟動速度較慢,因為它的某些部分需要時間來編譯。

別擔心

儘管如此,這些差異對大多數人來說並不是一個真正的問題,尤其是隨著計算機的速度越來越快。雖然某些編程語言的速度肯定比其他語言快,但真正重要的是它能完成一些事情。

當然,如果你對編程很有經驗的話,試著從你的代碼中獲得性能是很好的。但是,如果你剛開始學習,那麼首先要擔心的是如何學習動作。不管一門語言有多快或多慢,如果一開始什麼都不寫的話。

還有一個問題就是如何使用合適的工具來完成這項工作。例如,彙編語言非常適合編寫操作系統,因為它的級別非常低。但對於普通的桌面應用程序來說,這是一種過度的殺傷力。還有一些為web設計的語言,或者幫助減少錯誤的代碼,比如TypeScript等等。

當你學習一門編程語言時,你考慮了哪些因素?

  • 發表於 2021-03-13 15:07
  • 閱讀 ( 43 )
  • 分類:科技

你可能感興趣的文章

紅寶石(ruby)和python(python)的區別

...入式系統以及學術程式語言。 目錄 1. 概述和主要區別 2. 什麼是魯比 3. 什麼是Python 4. Ruby和Python的相似之處 5. 並列比較——Ruby與Python的表格形式 6. 摘要 什麼是紅寶石(ruby)? Ruby是松本由紀弘在1995年設計的一種高階程式語言。...

  • 發佈於 2020-10-19 17:41
  • 閲讀 ( 58 )

機器語言(machine language)和組合語言(assembly language)的區別

...程式碼或目的碼,由CPU執行。 目錄 1. 概述和主要區別 2. 什麼是機器語言 3. 什麼是組合語言 4. 機器語言與組合語言的相似性 5. 並列比較-機器語言與表格形式的組合語言 6. 摘要 什麼是機器語言(machine language)? 人類可以理解高...

  • 發佈於 2020-10-20 02:53
  • 閲讀 ( 86 )

高階語言(high level language)和低階語言(low level language)的區別

...式、作業系統和嵌入式系統。 目錄 1. 概述和主要區別 2. 什麼是高階語言 3. 什麼是低階語言 4. 高階語言與低階語言的相似性 5. 並列比較-高階語言與低階語言的表格形式 6. 摘要 什麼是高階語言(high level language)? 高階語言是接...

  • 發佈於 2020-10-23 20:12
  • 閲讀 ( 86 )

swift程式語言值得學習的7個原因

...了解更多資訊,請參閱我們關於高階語言與低階語言以及為什麼某些程式語言比其他語言更快的文章。 ...

  • 發佈於 2021-03-12 01:39
  • 閲讀 ( 60 )

尋找最好的程式語言?從這裡開始!

...瀏覽器端部分。但是Python是一種令人驚歎的語言,這就是為什麼它仍然是JavaScript的強大替代品。進一步瞭解Python for web開發。 PHP:你已經不太瞭解PHP了,因為它不像一些較新的web語言那麼流行,但它仍然被廣泛使...

  • 發佈於 2021-03-12 12:24
  • 閲讀 ( 67 )

為什麼c程式設計仍然值得學習

... 雖然這是C語言難以學習的部分原因,但這也是為什麼C程式設計師更傾向於與計算機的工作方式保持一致的原因。為了寫出好的C程式碼,你必須像計算機那樣思考:記憶體管理、輸入/輸出流、位元組順序等。 ...

  • 發佈於 2021-03-13 03:02
  • 閲讀 ( 57 )

如何選擇正確的web程式語言

...用程式時,有哪些選項可供選擇?在任何特定的場景中,為什麼要選擇某些語言而不是其他語言?本文將提供一個問題清單,程式設計師應該問,以選擇使用哪種語言。 ...

  • 發佈於 2021-03-16 01:36
  • 閲讀 ( 64 )

初學者最容易學習的6種程式語言

...專門的社群。需要更多的動力嗎?JoelLee詳細說明了Python為什麼非常有用。 ...

  • 發佈於 2021-03-16 10:37
  • 閲讀 ( 66 )

rust是最令人興奮的新程式語言

...有更容易學習的語言(但是Python也不適合所有人),那麼為什麼要學習Rust呢? ...

  • 發佈於 2021-03-21 09:32
  • 閲讀 ( 56 )

5 c程式設計技巧你必須學會入門

... 為什麼要學c語言程式設計? ...

  • 發佈於 2021-03-21 10:02
  • 閲讀 ( 46 )