2024-07-17|閱讀時間 ‧ 約 24 分鐘

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

在聊解什麼是 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





分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.