歡迎來到程式語言與翻譯軟體的世界!

你有沒有想過電腦實際上是如何理解你輸入的內容?你可能會寫下 print("Hello World"),但對電腦而言,一切都只是一連串的電子脈衝——開或關、1 或 0。本章將介紹人類易讀的程式碼與機器易懂的訊號之間的「橋樑」。我們將探討不同類型的程式語言,以及實現溝通的「翻譯官」。如果一開始覺得術語很多也別擔心,我們將會用簡單的比喻為你拆解它們!


3.6.3.1 程式語言的分類

並非所有程式語言都一樣。有些語言較「貼近」電腦的運作邏輯,有些則較貼近人類的思考方式。我們通常將它們分為兩類:低階語言 (Low-level)高階語言 (High-level)

1. 低階語言

這些語言高度依賴於它們所執行的硬體(處理器)。它們賦予程式設計師對電腦記憶體和處理器的直接控制權。主要分為兩種類型:

A. 機器碼 (Machine Code):
這是最基礎的層級。它完全由二進位數字(1 和 0)組成。這是處理器唯一能直接執行的東西。
範例:10110000 01100001

B. 組合語言 (Assembly Language):
直接撰寫 1 和 0 既費力又容易出錯。為了簡化流程,程式設計師開發了組合語言。它使用稱為助憶碼 (mnemonics)(記憶輔助)的簡短單字來代表機器碼指令。
範例:ADD 可能代表加法的二進位代碼。

2. 高階語言

這類語言包括 Python、Java 或 C#。它們使用類似英語的單字和數學符號,讓人類更容易閱讀與撰寫。它們具有可攜性 (portability),這意味著相同的程式碼通常可以在不同類型的電腦上執行。

什麼是「指令式 (Imperative)」高階語言?
大多數你在 AS Level 學習的高階語言都是指令式的。這代表程式碼是由一連串指令組成,精確描述電腦應該「如何」一步步執行任務。想像這像是一份烹飪食譜:「第一步,打雞蛋。第二步,攪拌它們。第三步,放入平底鍋。」

快速回顧:低階語言 vs. 高階語言
低階語言:較難學習,與特定處理器綁定,但提供絕對控制權且執行速度極快。
高階語言:較易學習,具備可攜性,但需要翻譯,且執行速度通常稍慢。

重點總結:低階語言(機器碼與組合語言)是給電腦看的;高階語言則是給人類看的。


3.6.3.2 程式翻譯軟體的類型

由於電腦只懂機器碼,任何以組合語言或高階語言編寫的程式碼都必須經過翻譯。主要有三種軟體負責執行此任務。

1. 組譯器 (Assembler)

組譯器用於將組合語言翻譯成機器碼。由於每一條組合語言指令通常對應一條精確的機器碼指令,這是一個相對簡單的翻譯過程。

2. 編譯器 (Compiler)

編譯器會將整個原始程式碼 (Source Code)(你所寫的程式)一次性翻譯成目的碼 (Object Code)(可執行的機器碼)。
比喻:這就像一位翻譯官拿著整本英文書,把它全部改寫成西班牙文。一旦西班牙文版本完成,你就可以隨時閱讀,不需要再次尋求翻譯官的協助。

3. 直譯器 (Interpreter)

直譯器則是採用逐行 (line-by-line) 的方式翻譯並執行程式碼。它會檢查一條指令、翻譯它、執行它,然後再移至下一行。
比喻:這就像聯合國的即席口譯員。他們聽一句英文,隨即轉述為西班牙文。如果你想再聽一次演講,翻譯官就必須重新再做一次翻譯工作。

你知道嗎? Python 通常是透過直譯方式運作的,這也是為什麼它會在程式出錯的那一行立刻停止並顯示錯誤資訊!


比較:編譯器 vs. 直譯器

選擇編譯器還是直譯器,取決於你的需求:

速度:編譯後的程式碼執行速度較快,因為翻譯工作早已完成。直譯後的程式碼因為邊執行邊翻譯,所以速度較慢。
隱私:編譯器會產生一個「執行檔」(.exe)。你可以將其交給他人使用,而無需公開原始程式碼。使用直譯器時,通常必須分享原始程式碼。
偵錯 (Debugging):直譯器對初學者非常友善!它們在遇到錯誤時會立刻停止,讓你更容易找出問題所在。

常見迷思:學生常誤以為執行機器碼也需要翻譯軟體。其實不需要!機器碼本身就是電腦能理解的語言。


中間語言 (Bytecode)

一些現代程式語言採取了「兩者兼顧」的方法。它們不是直接翻譯成機器碼,而是將原始程式碼翻譯成稱為位元組碼 (Bytecode) 的中間語言。

為什麼要使用位元組碼?
1. 可攜性:程式碼只需翻譯一次成位元組碼,就可以在任何裝有虛擬機器 (Virtual Machine)即時編譯器 (Just-In-Time Compiler, JIT) 的電腦(如 Mac、Windows、Linux)上執行。
2. 安全性:虛擬機器可以在執行前檢查位元組碼中是否有惡意指令。
3. 效率:位元組碼處於「中間」狀態,因此比起原始程式碼,它所需的記憶體更少,且完成最終翻譯的速度更快。

位元組碼如何運作?
• 它可以由虛擬機器執行,虛擬機器會扮演位元組碼直譯器的角色。
• 或者,它可以在執行前一刻由即時編譯器 (JIT Compiler) 轉換為機器碼。

重點總結:位元組碼是「通用語言」,讓程式能在幾乎任何設備上安全地執行。


快速術語定義回顧

原始程式碼 (Source Code):由程式設計師以高階語言撰寫的程式碼。
目的碼 (Object Code):由編譯器產生的最終機器碼,電腦可直接執行。
助憶碼 (Mnemonics):在組合語言中使用簡短單字(如 ADD 或 SUB)來代表二進位指令。
可攜性 (Portability):程式在不同類型的電腦系統上執行的能力。

總結:
人類撰寫原始程式碼。這些程式碼會透過編譯 (Compiled)(一次完成)或直譯 (Interpreted)(逐行翻譯)轉換為機器碼 (目的碼),以便處理器執行。組合語言是一個折衷方案,使用助憶碼並由組譯器翻譯。位元組碼則是一個巧妙的「中間」步驟,讓程式具備可攜性與安全性!