程式語言執行模式

編譯式、直譯式與混合式

本教材詳細介紹程式語言的三種主要執行模式:**編譯式 (Compiled)**、**直譯式 (Interpreted)** 以及兩者的**混合模式**,並特別分析了 Python 的執行機制。


一、 編譯式語言 (Compiled Languages)

概念

編譯式語言在程式執行前,會透過「**編譯器 (Compiler)**」將整個原始碼一次性轉換成機器可以直接理解和執行的「**機器碼 (Machine Code)**」。

執行流程

原始碼 (.c/.cpp) $\xrightarrow{\text{編譯器}}$ 目的碼 / 機器碼 (執行檔) $\xrightarrow{\text{作業系統}}$ 執行

代表語言

C, C++, Rust, Go, Swift

優缺點

  • 優點: 執行速度快(接近硬體極限)、效能優化程度高、程式碼隱私性高。
  • 缺點: 開發流程長(每次修改需等待編譯)、跨平台性差(需針對不同平台重新編譯)。


二、 直譯式語言 (Interpreted Languages)

概念

直譯式語言在程式執行時,透過「**直譯器 (Interpreter)**」**逐行 (Line-by-line)** 讀取、翻譯並立即執行原始碼。

執行流程

原始碼 (.js/.php) $\xrightarrow{\text{直譯器}}$ 執行

代表語言

Python(開發者角度), JavaScript (在瀏覽器中), Ruby, PHP, Shell Script (Bash)

優缺點

  • 優點: 開發效率高(無需編譯等待)、跨平台性強(只要有直譯器即可運行)。
  • 缺點: 執行速度慢(每次運行需即時翻譯)、錯誤偵測晚(執行到錯誤行才發現)。

三、 半編譯半直譯語言 (Hybrid / Bytecode Languages)

概念

混合式語言結合了編譯與直譯,首先將原始碼編譯成一種平台中立的「**位元碼 (Bytecode)**」,再由一個「**虛擬機器 (Virtual Machine, VM)**」進行直譯或使用 JIT 技術執行。

執行流程

原始碼 $\xrightarrow{\text{編譯器}}$ 位元碼 (Bytecode) $\xrightarrow{\text{虛擬機器 (VM) / JIT}}$ 執行

代表語言

Java (JVM), C# (CLR / .NET), Python (技術細節上)

優缺點

  • 優點: 高效能的跨平台性(一次編譯,到處運行)、JIT 技術可進一步優化效能。
  • 缺點: 啟動較慢(VM 需要初始化)、資源消耗較大(VM 佔用記憶體)。


四、 Python 的執行模式深度解析

Python 通常被認為是一種**直譯式語言**,但在嚴格的技術層面上,它更準確地屬於**半編譯半直譯式**。

從開發者角度:直譯式

從開發和使用的直觀體驗來看,Python 程式碼直接運行原始檔(.py),無需手動編譯,符合直譯式語言的特性。

從底層技術角度:半編譯半直譯

Python 的執行分為兩階段,使其具有混合式的特性:

  1. 編譯成位元碼: 當你運行 Python 程式時,直譯器會首先將原始碼編譯成針對 **Python 虛擬機器 (PVM)** 的「位元碼」。這些位元碼通常緩存於 __pycache__ 資料夾的 .pyc 檔案中。
  2. 虛擬機器直譯: 隨後,這些位元碼會被 **PVM** 直譯執行,將位元碼指令轉換為底層機器碼來實際運行。

結論: 雖然 Python 的外部行為是直譯式的,但其內部的位元碼機制使其採用了類似 Java 的**混合執行模型**。


總結比較表

特性 編譯式 直譯式 混合式 (位元碼)
翻譯時機 執行前一次性完成 執行時逐行翻譯 執行前編譯成位元碼;執行時由 VM 翻譯
執行速度 最快 較慢 快速 (透過 JIT 逼近編譯式)
可執行檔 原生機器碼 無 (依賴原始碼和直譯器) 位元碼檔案
代表語言 C, C++, Go Python, JavaScript, PHP, Ruby Java, C#, Python

留言

這個網誌中的熱門文章

目錄

資料型態

Code::Blocks