當代計算機程式語言簡單梳理(附計算機硬體底層工作流程)

兔子遠征軍發表於2020-10-15

 

(序言)

前兩年就在想叩開計算機程式設計世界的大門,但是因為語言選擇上的繁雜,最終停下了。去年看過一段時間的計算機程式執行原理和程式語言的原理,後來因為計算機語言的繁雜沒有繼續更深入的瞭解。當時只是把計算機語言做了分類,今天(2020.10.13)在安裝visual studio時候看到那麼些套件,又勾起了學習心。再次瞭解計算機語言,也算有所收穫,所以記錄下來,做個簡單的梳理。一開始並沒有準備寫硬體底層執行流程,但是寫到機器語言時候不得不提到控制硬體,提到控制硬體就又不得不提到硬體工作流程。後覺得這個應該單獨放在開頭,不想了解底層的可以直接跳過該篇幅。

題外話:程式設計的目的是讓編寫的程式順利執行以達到計算機替代人完成機械重複的計算,為人節省出時間以陪伴家人朋友愛人,感受生活的美好。如果為程式設計而佔用了和家人朋友愛人的生活時光,這樣就捨本逐末了。

 

(硬體底層)

介紹程式語言前,先跟隨博主來了解一下計算機硬體底層的工作流程:

作業系統啟動時,北橋晶片將記憶體、顯示卡硬體引數傳遞給CPU,南橋晶片將其他硬體引數傳遞給北橋晶片再由北橋晶片傳遞給CPU。作業系統執行時,大家在操作計算機的每個動作(如點選滑鼠、鍵盤等)都將以機器語言指令的形式經由南橋晶片傳遞給北橋晶片再由北橋晶片傳遞給CPU,CPU接收到該條機器語言指令後由內部的邏輯處理與暫存器指令集對照並按指令集處理該指令,而後由CPU內部的控制處理器將被處理後的機器語言指令傳遞給北橋晶片,再由北橋晶片傳遞給顯示卡晶片,顯示卡晶片控制顯示器顯示最終結果。

這裡博主再簡單介紹一下CPU晶片的底層(即“半導體”):CPU晶片是矽片及矽片上刻蝕形成的眾多電晶體的合稱。電晶體就是半導體,半導體就等同於阻器+變壓器+開關,所以你看,晶片並不神祕,只是把數量眾多的電阻器、變壓器、開關放在了一個小板子(矽片)上。半導體是電子科技的基石,沒有半導體就沒有電子科技、電子裝置,今年的華為晶片事件就是因為沒有掌握這種半導體制造技術(怎麼把那麼多電阻器、變壓器、開關放到那麼小的板子上)造成的。

 

(程式語言)

現在我們開始介紹程式語言,首先,要區分一點,程式的程式設計過程和程式的執行過程是兩個不同的概念!程式程式設計過程是在程式設計師電腦上,而程式執行過程是在程式使用者電腦上。這也是為什麼很多小白對介紹程式設計基礎的文章感到費解的地方。

計算機語言,按照可識別性分為三類:

機器語言(就是那種01011101010010...的超長表示方式)、組合語言(那種sub ax,ax...的繁複的表示方式)、高階語言(那種printf ("123")的簡短的表示方式)

隨計算機一同產生的就是機器語言(或者說是電路通斷訊號更貼切),但程式設計過程過於繁重,遂產生了組合語言(以英文符號表示各種電路通斷集的語言),而隨著編寫程式越來越大,組合語言還是顯得過於晦澀繁複,於是就產生了高階語言(以英文語句表示彙編指令的語言),這樣程式設計過程變得輕鬆容易多了。

早期高階語言中的三大主流語言(都是程式導向的):

C語言、Pascal語言、Basic語言

C語言做系統開發,Pascal做程式設計教學,Basic做應用開發

當代高階語言(都支援物件導向):

C++、Java、C#、VB.NET、Python、JavaScript、PHP....

早期計算機效能低下導致執行速度慢,因程式導向的方式執行起來效率高於物件導向的方式,所以早期的高階語言都是程式導向的,而當代計算機效能已經很好了,效率不高效能來補,物件導向的語言,程式碼修改起來方便、程式碼可複用率高的優點凸顯,因此就自然而然被主流高階語言所採用了。

當代計算機高階語言按照程式設計過程和程式執行過程可分為:

1.編譯型語言:在程式設計過程中,由第三方程式將高階語言程式碼轉換成當前系統可識別的組合語言指令,再轉換成機器語言指令儲存進檔案;在程式執行的過程中,作業系統讀取該檔案中的機器語言指令使相應的硬體動作。

2.解釋型語言:在程式設計過程中,將高階語言程式碼原樣儲存進檔案;在程式執行的過程中,由第三方程式讀取該檔案中的高階語言程式碼並轉換成當前系統可識別的組合語言指令,再轉換成機器語言指令,作業系統讀取該機器語言指令使相應的硬體動作。

3.解釋編譯型語言:在程式設計過程中,將高階語言程式碼轉換成第三方程式才能識別的類(似)機器語言指令並儲存進檔案;在程式執行過程中,由第三方程式讀取該檔案中的類(似)機器語言指令,並轉換成機器語言指令,作業系統讀取該機器語言指令使相應的硬體動作。

很明顯,在程式設計過程中解釋型語言效率最高、解釋編譯型語言效率居中、編譯型語言效率最低;在程式執行過程中編譯型語言效率最高、解釋編譯型語言效率居中、解釋型語言效率最低。

終究編寫程式就是用來執行用的,所以大家更關注程式執行過程中的效率。毫無疑問編譯型語言效率最高,加上無需安裝第三方程式就能直接執行,使之成了高階程式語言的首選語言型別。但編譯型語言有一個缺點,那就是隻能在支援該語言轉換的作業系統上執行,比如你在Windows系統上用C++語言編寫轉換得到的exe程式,在Mac系統上就無法執行,因為Windows系統可識別的組合語言指令和Mac系統可識別的組合語言指令不同,導致在Windows上轉換成的機器指令無法被Mac系統識別,也就無法使相應的硬體動作了。而解釋型語言和解釋編譯型語言卻可以在不同的作業系統中執行,原因就是需要在當前作業系統中安裝第三方程式後才可以執行它們,就是這個第三方程式在你編寫的程式執行過程中把程式碼直接轉換成當前系統可識別的機器語言指令了。解釋編譯型語言在程式執行過程中的效率又比解釋型語言高,所以如果需要一段程式碼在所有的作業系統上都能執行,解釋編譯型語言則是首選。而解釋型語言的最大優點就是程式設計過程中效率高,隨時修改隨時能執行。博主本人喜歡的批處理就是解釋型語言,用於對檔案資料夾的操作,隨時改動隨時用,省去了編譯的步驟,挺方便。

最後總結一下:編寫的程式只在一種作業系統中執行,首選編譯型語言;編寫的程式要在多種作業系統中執行,首選解釋編譯型語言;編寫的程式需要隨時修改隨時執行,首選解釋型語言。

 

 

 


 

相關文章