編程語言分類
1. 機器語言
- 直接使用 (101010) 二進制指令去編寫程序, 等于?直接操作硬件
- 優點 : 最底層, 離計算機最近, 執行速度快
- 缺點 : 復雜難記, 開發效率最低,
2. 匯編語言
- 用英文標簽代替一組二進制指令, 本質上仍然是?直接操作硬件
- 優點 : 比較底層, 執行速度最快
- 缺點 : 比機器語言好記了一點, 但還是復雜, 開發效率最低
3. 高級語言
- 站在?人的角度?, 說人話, 用人類的?字符?去編寫程序
- 高級語言不能直接被計算機理解, 需要轉化成二進制
- 這中間復雜的轉換過程被?解釋器?封裝成簡單的接口供程序員使用, 屏蔽了硬件的操作
編譯型語言(C, GO...) : 相當于谷歌翻譯這種工具 | |
優點 : 第二次使用時直接拿上次翻譯的結果 | |
缺點 : 平臺硬件版本可能不一樣, 跨平臺性差 | |
工具 : 編譯器 | |
解釋型語言(python,javascript...) : 相當于一個翻譯員, 即時翻譯 | |
優點 : 跨平臺性好, 一份代碼可以到處使用 | |
缺點 : 執行速度慢, 依賴解釋器運行 | |
工具 : 解釋器 | |
JavaScript 是一種解釋型語言。
解釋型語言是指在運行時,程序代碼被解釋器一行一行地讀取并解釋執行的語言。與編譯型語言(如 C、C++、Java)不同,編譯型語言在程序運行前需要將源代碼編譯成機器碼(或字節碼),然后機器碼才能被執行。而解釋型語言則不需要這個預編譯的過程,代碼直接由解釋器讀取并執行。
JavaScript 通常在瀏覽器中運行,由瀏覽器的 JavaScript 引擎(如 V8、SpiderMonkey、ChakraCore 等)進行解釋和執行。這些引擎會讀取 JavaScript 源代碼,并將其轉換成機器可以理解的形式(通常是字節碼或中間代碼),然后執行。因此,JavaScript 是一種典型的解釋型語言。
但值得注意的是,現代的 JavaScript 引擎為了提高性能,通常會使用一些優化技術,如即時編譯(JIT)和熱點分析,將頻繁執行的代碼片段轉換成機器碼以提高執行效率。但這些優化技術并不影響 JavaScript 作為一種解釋型語言的本質。
機器碼和字節碼不是同一個概念
-
機器碼(Machine Code):
機器碼是計算機能直接識別并執行的指令代碼,通常由數字0和1組成。每種微處理器都有自己的指令集,即機器語言。機器碼也稱為原生代碼(Native Code)或機器語言。用機器語言編寫的程序,不需要任何翻譯或轉換,可以直接被計算機的中央處理器(CPU)所執行。 -
字節碼(Bytecode):
字節碼是一種中間代碼,它比機器碼抽象層次更高,但比源代碼(如Java、C#等高級語言的代碼)更低。字節碼是源代碼經過編譯后得到的一種中間表示形式,它還不能直接被執行,需要被虛擬機(如Java虛擬機JVM)或解釋器進一步解釋或轉換為機器碼才能執行。字節碼的主要特點是它不依賴于具體的機器硬件和操作系統,因此具有跨平臺性。
舉例來說,Java是一種編譯型語言,但Java源代碼并不是直接編譯成機器碼,而是先編譯成字節碼,然后由JVM(Java虛擬機)在運行時將這些字節碼轉換成特定平臺的機器碼來執行。這使得Java具有“一次編寫,到處運行”的特性。
先轉字節碼,再轉機器碼嗎
是的,對于某些編程語言(如Java、C#等)和它們的運行時環境(如Java虛擬機JVM、Common Language Runtime CLR等),程序的源代碼首先會被編譯成字節碼(Bytecode),然后在運行時,這些字節碼再由相應的虛擬機或即時編譯器(Just-In-Time, JIT Compiler)轉換成特定平臺的機器碼來執行。
這個過程可以概述為以下步驟:
-
源代碼:程序員使用高級編程語言(如Java、C#)編寫的程序文本。
-
編譯器:將源代碼編譯成中間表示形式(如字節碼)。這個過程通常稱為“前端編譯”或“源代碼編譯”。
-
字節碼:源代碼編譯后的中間表示形式,是一組與特定硬件和操作系統無關的指令。這些指令被設計為可以由虛擬機理解并執行。
-
虛擬機:一個軟件層,它模擬計算機硬件并提供一個運行環境來執行字節碼。虛擬機負責將字節碼轉換成可以在其宿主操作系統和硬件上運行的機器碼。
-
即時編譯器(JIT Compiler):虛擬機中的一個組件,它可以在運行時將字節碼動態地編譯成機器碼。JIT編譯的目標是減少解釋字節碼所需的開銷,從而提高程序的執行效率。JIT編譯器通常會對程序中頻繁執行的代碼段進行優化,生成更高效的機器碼。
-
機器碼:計算機硬件可以直接執行的指令。JIT編譯器將字節碼轉換成機器碼后,這些機器碼就可以直接由計算機的中央處理器(CPU)執行了。
這個過程允許程序員編寫跨平臺的代碼,因為字節碼是與硬件和操作系統無關的。同時,JIT編譯技術又可以在運行時提高程序的執行效率。
補充:
匯編語言作為低級編程語言,直接對應著不同的機器語言指令集,因此存在多種類型。以下是幾種常見的匯編語言及其簡要介紹:
- x86匯編語言:
- 應用:在PC和服務器領域得到廣泛使用。
- 特點:可以直接操作寄存器、內存以及其他外設,具有很高的靈活性和可操作性。
- 語法規則:使用Intel語法和AT&T語法兩種不同的語法規則。
- 編譯器:常用的編譯器有MASM、NASM和GAS。
- ARM匯編語言:
- 應用:廣泛應用于移動設備、嵌入式系統和物聯網等領域。
- 特點:以低功耗、高性能和內容豐富的架構而聞名,具有很好的可移植性和可擴展性。
- 語法規則:使用ARM體系結構定義的指令集和語法規則。
- 編譯器:常用的編譯器有ARM匯編器和GNU匯編器等。
- MIPS匯編語言:
- 應用:被廣泛應用在嵌入式系統、數字信號處理以及網絡設備等領域。
- 特點:以其簡潔的指令集和高效的架構而著稱,具有很高的執行效率和指令流水線能力。
- 語法規則:使用MIPS體系結構定義的指令集和語法規則。
- 編譯器:常用的編譯器有MIPS匯編器。
- PowerPC匯編語言:
- 應用:主要應用于IBM PowerPC架構的服務器、工作站以及游戲機等領域。
- 特點:以其高性能和可擴展性而著稱,可以直接操作處理器寄存器、存儲器和外設,具有很好的可移植性和性能表現。
- 語法規則:使用PowerPC指令集和語法規則。
- 編譯器:常見的編譯器有PowerPC匯編器。
這些匯編語言都針對不同的處理器架構和應用場景設計,具有各自的特點和優勢。匯編語言在底層編程、硬件操作和高要求的程序優化等場合發揮著重要作用。