先有雞還是先有蛋?Compiler vs Program

這學期準備要修 編譯器設計,我想到一個之前逢甲資工的老頭問我的一個問題,同時這也是他們編譯器老師問的問題:

先有 Compiler 還是先有程式?

其實同樣的問題也出現在作業系統上面,因為作業系統也是由程式所設計出來的,例如UNIX就是用C語言所編寫出來的。

針對這個問題我找了為基百科和一些網頁資料,我認為應該是先有程式,才有編譯器,因為去看電腦發展的歷史,很早期的電腦(真的是很早期),或是更精確一點說是計算機,其實是沒有程式的,是以純機械原理模擬出運算能力,而晶體管(transistor)發明以後,機械進入的電子的時代,電子電機工程開始興起,也就產生了數位系統。

第一次是聽補教界的名師洪逸在課堂上說的,後來在<Pirate of Silicon Valley>中看到比爾蓋茲和賈伯斯他們真的是這樣寫程式而印象深刻,後來發展出的打洞卡(Punch Card),電腦先輩們都必須利用打卡的方式控制機器,而這也就是最早的程式語言,也就是為什麼影片中兩位大老會想要說服當時的電腦大廠接受他們開發的作業系統,作業系統本身也是程式,也是由程式語言創作出來的,基於這個概念,因此編譯器也是後來才有的。

另一個可以支持這個說法的還有一點,那就是高階程式語言是在後期才出現的,早期的電腦由打卡控制提升到指令控制時,幾乎都是接近於機器碼的組合語言(Assembly Language),而高階語言經過編譯器編譯以後都是轉譯成組合語言,再轉譯成機器碼,這也就是為什麼組合語言比較難學,卻也是最直接能與硬體做互動的原因。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s