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

 

(序言)程序員

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

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

 

(硬件底層)性能

介紹編程語言前,先跟隨博主來了解一下計算機硬件底層的工做流程:學習

操做系統啓動時,北橋芯片將內存、顯卡硬件參數傳遞給CPU,南橋芯片將其餘硬件參數傳遞給北橋芯片再由北橋芯片傳遞給CPU。操做系統運行時,你們在操做計算機的每一個動做(如點擊鼠標、鍵盤等)都將以機器語言指令的形式經由南橋芯片傳遞給北橋芯片再由北橋芯片傳遞給CPU,CPU接收到該條機器語言指令後由內部的邏輯處理與寄存器指令集對照並按指令集處理該指令,然後由CPU內部的控制處理器將被處理後的機器語言指令傳遞給北橋芯片,再由北橋芯片傳遞給顯卡芯片,顯卡芯片控制顯示器顯示最終結果。spa

這裏博主再簡單介紹一下CPU芯片的底層(即「半導體」):CPU芯片是硅片及硅片上刻蝕造成的衆多晶體管的合稱。晶體管就是半導體,半導體就等同於阻器+變壓器+開關,因此你看,芯片並不神祕,只是把數量衆多的電阻器、變壓器、開關放在了一個小板子(硅片)上。半導體是電子科技的基石,沒有半導體就沒有電子科技、電子設備,今年的華爲芯片事件就是由於沒有掌握這種半導體制造技術(怎麼把那麼多電阻器、變壓器、開關放到那麼小的板子上)形成的。操作系統

 

(編程語言)對象

如今咱們開始介紹編程語言,首先,要區分一點,程序的編程過程和程序的執行過程是兩個不一樣的概念!程序編程過程是在程序員電腦上,而程序執行過程是在程序使用者電腦上。這也是爲何不少小白對介紹編程基礎的文章感到費解的地方。事件

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

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

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

相關文章
相關標籤/搜索