備戰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
留言分享你的想法!
avatar-img
dkdk12358的沙龍
71會員
65內容數
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
註解 & Print & 變數型態
Thumbnail
註解 & Print & 變數型態
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News