備戰APCS (2) -- 什麼是Compiler/編譯器?

閱讀時間約 2 分鐘

在聊解什麼是 Compiler 之前

我們先建立一個共識:

“所有人寫的程式會變成指令

每一道指令是由CPU執行

而CPU所能理解的指令類型有限”


每一顆 CPU 在設計的時候

其實他有固定的、能理解的指令

舉例來說,某顆 CPU 可能只認得 100 道指令

所以所有的程式,無論你寫了幾千甚至幾百萬行

它終究會變成100道指令的某種排列組合

這樣說好了,它有點像密碼鎖

密碼鎖雖然只有 0-9 但你只要按得夠多次

它就會變成一個很長、很難破解的東西

又或者你可以把它想像成是樂高積木

雖然樂高積木的『類型』有限

但你只要發揮創意就能夠把它變成各式各樣的東西

所以你不論是寫 C/C++/Python/Scala/Java....

它終究終究終究是一道一道的CPU指令


那麼這個時候也許你會出現數個問題:

  • 為什麼不能直接寫指令呢?
  • C/C++/Python/Scala/Java...等等的程式語言又是如何變成指令的呢?

首先,你可以寫指令,這是絕對可行的

只是這代表兩件事:

  1. 你要對你所使用的CPU很熟很熟
  2. 你寫的指令串只要換了一種CPU就沒辦法用了

這有點像是你家如果有十個密碼鎖

每個密碼鎖的密碼都不一樣,如果你很熟很熟你也是可以每個都打開的

但是這會變得很麻煩~於是很快的...資公領域就發展出一種東西叫 Compiler(編譯器)

它的功能就是:把 C/C++ 寫的程式變成一道一道的指令給 CPU 執行

那麼你就只要對 C/C++ 很熟就好了,其他的事情就交給 Compiler 做

而 Compiler 的通常是由非常熟悉CPU指令的人所寫的

所以 CPU 指令只要有少數幾個人熟就好,其他人只要用 Compiler 就可以把程式碼轉成指令

試想,市面上有成千上萬種 CPU,而你寫的程式碼可以在他們全部上面跑

這可以省去多少時間

PS 程式碼 ---> (經過編譯器)-----> CPU可以執行的執行檔

所以簡單的來講:

Compiler 就是把程式語言變成CPU指令的工具

當我們說 “C-compiler”的時候,我們的意思是能夠暸解 C 語言並且把它轉成 CPU 指令的編譯器

而當我們說 "Rust-Compiler"的時候,我們是只能夠暸解 Rust 語言並且把它轉成 CPU 指令的編譯器

但就像我前面說的,其實CPU可能有成千上萬種,編譯器怎麼知道你是要編譯給誰用的呢?

通常通常,如果我們在 A 這種 CPU 上編譯的結果就是給 A 這種 CPU 用的

但少數也會有在 A CPU 上編譯的結果給 B CPU 用的狀況,這個過程我們稱之為 Cross-Compile 但一般人應該是用不到才對

講了這麼多,希望你對編譯器有點想法

那以下就是最最最普通使用 gcc (C-compiler)的時候會用的 command:

gcc -o main main.c





avatar-img
68會員
61內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
dkdk12358的沙龍 的其他內容
我相信所有在看這篇的人 也許是緊張的父母、也許是身為高中生的你 回頭看看我自己的升學路程,我是多麼希望當時有 APCS 在繼續往下之前,不論你有沒有學過程式 我希望你先試著回答以下三個的題目 以下程式碼執行之後會在螢幕上出現 1,試問我要如何更動可以變成在螢幕上出現10? int a =
我相信所有在看這篇的人 也許是緊張的父母、也許是身為高中生的你 回頭看看我自己的升學路程,我是多麼希望當時有 APCS 在繼續往下之前,不論你有沒有學過程式 我希望你先試著回答以下三個的題目 以下程式碼執行之後會在螢幕上出現 1,試問我要如何更動可以變成在螢幕上出現10? int a =
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
親愛的讀者 感謝你提出這個問題。這是一個現代社會中很常見且重要的疑惑。隨著科技的迅猛發展,程式設計似乎成了人人必備的技能,讓許多人產生了焦慮和壓力。讓我們從多個角度深入探討這個問題,希望能為你解答心中的疑惑,並提供實用的建議。
Thumbnail
筆記-2024.03.16-曲博 財訊訪談-談ARM *處理器的兩種架構: 精簡指令集RISC 複雜指令集CISC, *CPU為複雜指令集,運算能力較強,缺點是較耗電。 *ARM,為精簡指令集,運算效能較差,但較省電,屬於微處理器(MPU)。 *英特爾稱霸電腦用CPU, 然而手機較看重
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
親愛的讀者 感謝你提出這個問題。這是一個現代社會中很常見且重要的疑惑。隨著科技的迅猛發展,程式設計似乎成了人人必備的技能,讓許多人產生了焦慮和壓力。讓我們從多個角度深入探討這個問題,希望能為你解答心中的疑惑,並提供實用的建議。
Thumbnail
筆記-2024.03.16-曲博 財訊訪談-談ARM *處理器的兩種架構: 精簡指令集RISC 複雜指令集CISC, *CPU為複雜指令集,運算能力較強,缺點是較耗電。 *ARM,為精簡指令集,運算效能較差,但較省電,屬於微處理器(MPU)。 *英特爾稱霸電腦用CPU, 然而手機較看重
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護