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

  • 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系統識別,也就無法使相應的硬件動作了。而解釋型語言和解釋編譯型語言卻可以在不同的操作系統中執行,原因就是需要在當前操作系統中安裝第三方程序後才可以執行它們,就是這個第三方程序在你編寫的程序執行過程中把代碼直接轉換成當前系統可識別的機器語言指令了。解釋編譯型語言在程序執行過程中的效率又比解釋型語言高,所以如果需要一段代碼在所有的操作系統上都能執行,解釋編譯型語言則是首選。而解釋型語言的最大優點就是編程過程中效率高,隨時修改隨時能執行。博主本人喜歡的批處理就是解釋型語言,用於對文件文件夾的操作,隨時改動隨時用,省去了編譯的步驟,挺方便。

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