我在網上自學java時想到了這個問題!語言程式需要在有系統的電腦上才能跑起來,而系統本身就是一個程式,那麼最開始的時候,系統是怎麼做出來的,這不是矛盾的嗎?就好比雞和蛋哪個先出現一樣
回覆列表
-
1 # 搬磚程式設計師
-
2 # 程式設計師1024
沒有學過計算機發展史吧,你學過就不會感覺疑惑。第一代為機器語言,即0101這種形式,也是現代計算機主要資料儲存和表示方式。第二代為自然語言(組合語言),即開始透過符號來表示0101,例如AND。第三代高階語言(以C/C++,Java為代表),就是題主所舉例的。作業系統本身也是一種程式,不過是混入了一些組合語言。高階語言是面向應用層的,機器、彙編面向是物理層的,作業系統不是用Java編寫的,而是一個和Java無關的領域了。
這個是不矛盾的,為何非要糾結於雞和蛋。作業系統本身就是一個程式,有沒有作業系統和能不能寫出程式是沒有關係的。
當計算機出來的時候,便是透過0和1來操作(低電壓和高電壓),也就是最底層的硬體就是透過電壓然後一個個的門來進行操作的。
那麼這些門怎麼組成電腦的呢?(準確來說是CPU),不同的CPU有不同的組成方式,早期的電腦就是一臺機器就是一臺機器,其他機器的命令絕對不可能執行在這樣機器上。所以後來決定統一一下。所以現在主流的CPU架構就這麼幾種。
不同的CPU架構,它的指令是不一樣的,所有這樣的指令,被稱為指令集,這個指令集可以完整的操控電腦的所有硬體。這就是機器碼。那麼後來決定這樣太麻煩了,記不住,於是發明了組合語言,加入了一些助記符號。
但是這樣還是很麻煩(中間的發展過程我就不詳細講了),於是發明了c語言,在早期的c語言裡面可以嵌入組合語言的,雖然現在已經不允許了。c語言被稱作中級語言,因為它很方便,但是對底層的硬體支援十分良好。c語言的指令,對應的就是組合語言的指令或者最原始的機器指令。當編譯之後,c語言指令(組合語言指令)就轉變為了機器碼。然後這樣的機器碼才在CPU上執行。
那麼作業系統呢?第一個作業系統是由BCPL(c語言的前身)語言寫出來的(Unix),雖然後來經過最佳化,使用C語言完成的。
所以說作業系統也不過是一個程式而已,沒有作業系統,只是不習慣我們現在操作而已,如果直接將機器碼放在CPU中,一樣是可以執行的。
而Java就是自己的指令對應著c語言的指令或者機器碼,然後透過JVM進行編譯或者解釋,最終執行。