編譯型與解釋型編程語言的區別

来源:https://www.cnblogs.com/superwuchaofan/archive/2022/08/04/16550375.html
-Advertisement-
Play Games

Java 的集合體系 Java集合可分為兩大體系:Collection 和 Map 1.常見的Java集合如下: Collection介面:單列數據,定義了存取一組對象的方法的集合 List:元素有序(指的是存取時,與存放順序保持一致)、可重覆的集合 Set:元素無序、不可重覆的集合 Map介面:雙 ...


前面我們知道了高級編程語言電腦是不能直接識別的,需要通過翻譯成機器碼然後交由電腦執行。

根據不同的翻譯機制,又分為編譯型和解釋型。

註意,翻譯源代碼是一個非常複雜的過程,大致包括詞法分析,語法分析,語義分析,性能優化,目標代碼生成等五個步驟。在初學階段沒有必要研究這個,如果感興趣可以閱讀《編譯原理》一書。

接下來我會使用通用的語言和類比的方式講解編譯和解釋。

編譯型

如果把高級編程語言編寫的代碼比作一篇英文文章,電腦比作一個不懂英文的人。那麼,為了讓這個人閱讀這篇文章,可以找一名懂英文的翻譯將這篇文章整體翻譯成中文版。然後他就可以隨時隨地的閱讀這篇翻譯後的文章。

編譯的過程其實跟上面翻譯的過程很像。

編譯型編程語言就是通過編譯器(英文翻譯)將源代碼(編譯型編程語言編寫的程式,類比英文文章)編譯(翻譯)成可執行文件(翻譯後的文章)。

1658829684074

可執行文件可以在任何支持的平臺上,脫離編譯環境運行。因為可執行程式就是機器碼,所以它的執行效率高。但是編譯型編程語言一般是不能跨平臺的,也就是說不能在不同的操作系統間任意切換, 並且修改程式也非常不方便,只要源代碼修改了,都需要重新編譯生成新的可執行文件。C語言,C++就是典型的編譯型編程語言。

解釋型

接上面的類比,翻譯這篇英文文章,還可以通過隨身電子詞典,逐字逐句的邊看邊翻譯。

解釋型編程語言就是通過解釋器(電子詞典)將源代碼(解釋型編程語言編寫的程式)逐行解釋成機器碼,然後交由電腦執行。

1658904942703

解釋型編程語言編寫的程式離不開解釋器,因為是邊翻譯邊執行所以相對效率不高,但是修改起來非常方便,只要源代碼修改了,下一次執行就是修改後的代碼。解釋型編程語言大都可以跨平臺運行,這歸功於解釋器。Python,php就是典型的解釋型編程語言。

關於Python

Python屬於典型的解釋型編程語言,支持所有常見的平臺,例如Linux,Windows,Mac OS, Android, FreeBSD等等,只要在不同的平臺上安裝了對應的解釋器,代碼就可以正確運行,一般不需要擔心任何相容性問題,真正做到了"一次編寫,到處運行"。

另外,關於執行效率,你可能會看到很多人說python的執行效率差。那隻是相對而言,隨著硬體性能的提升,和很多優化手段,python在某些時候執行效率甚至會超過c語言,所以忘記這個效率問題,全心全意的學習python吧。

總結

總結編譯型編程語言與解釋型語言的區別如下表:

類型 原理 優點 缺點
編譯型語言 通過專門的編譯器,將所有源代碼一次性轉換成特定平臺(Windows、Linux 等)執行的機器碼(以可執行文件的形式存在)。 一次編譯,多次運行,脫離編譯環境,並且運行效率高。 可移植性差,不夠靈活。
解釋型語言 由專門的解釋器,根據需要將部分源代碼臨時轉換成特定平臺的機器碼。 跨平臺性好,通過不同的解釋器,將相同的源代碼解釋成不同平臺下的機器碼。 一邊執行一邊轉換,效率不搞。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • “生產環境伺服器變慢?如何診斷處理” 這是最近一些工作5年以上的粉絲反饋給我的問題,他們去一線大廠面試,都被問到了這一類的問題。 今天給大家分享一下,面試過程中遇到這個問題,我們應該怎麼回答。 這個問題高手部分的回答,我整理到了一個10W字的文檔裡面,大家可以在我的主頁加V領取。 來看看高手的回答。 ...
  • 1、jsp表達式和EL標簽 1.1 獲取值的區別 1.用法el表達式更加簡潔 2.獲取參數不存在時,jsp表達式時null,el表達式是空; <% request.setAttribute("userName", "kh96"); %> <p>獲取作用域中存在的值:userName_jsp = <% ...
  • SpringBoot 2.7.2 學習系列,本節通過實戰內容講解如何集成 MyBatisPlus 本文在前文的基礎上集成 MyBatisPlus,並創建資料庫表,實現一個實體簡單的 CRUD 介面。 MyBatis Plus 在 MyBatis 做了增強,內置了通用的 Mapper,同時也有代碼生成 ...
  • 最近在研究所做網路終端測試的項目,包括一些嵌入式和底層數據幀的封裝調用。之前很少接觸對二進位原始數據的處理與封裝,所以在此進行整理。 ...
  • 跨域指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript施加的安全限制。在做前後端分離項目的時候就需要解決此問題。 ...
  • 在眾多編程語言中,Python的社區生態是其中的佼佼者之一。幾乎所有的技術痛點,例如優化代碼提升速度,在社區內都有很多成功的解決方案。本文分享的就是一份可以令 Python 變快的工具清單,值得瞭解下。 一、序言 這篇文章會提供一些優化代碼的工具。會讓代碼變得更簡潔,或者更迅速。 當然這些並不能代替 ...
  • 動態數組底層是如何實現的 引言: 提到數組,大部分腦海裡一下子想到了一堆東西 int long short byte float double boolean char String 沒錯,他們也可以定義成數組 但是,上面都是靜態的 不過,咱們今天學習的可是動態的(ArrayList 數組) 好接下 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...