1. 程式人生 > >PYTHON之計算機語言基礎知識 —— 編程語言的分類

PYTHON之計算機語言基礎知識 —— 編程語言的分類

之間 bsp 修改 兼容性 gpo 程序編譯 就是 ali 腳本

一、計算機語言分類

  低級語言、高級語言、專用語言、腳本語言

  1、低級語言:機器語言、匯編語言和符號語言。機器語言是用二進制代碼表示的計算機能直接識別和執行的一種機器指令(機器碼)的合集,他是計算機的設計者通過計算機的硬件結構賦予計算機的操作功能;匯編語言(亦稱符號語言)用助記符代替機器指令的操作碼,匯編語言源程序必須經過匯編生成目標文件,然後執行。

  2、高級語言:主要是相對匯編語言而言,它更接近自然語言和數學公式的編程,基本脫離了機器的硬件系統,用人們更易理解的方式編寫程序,編寫的程序稱為源程序。高級語言並不是特指某一具體語言,而是包括很多編程語言,如流行的java,C/C++,C#,pascal,python,lisp,prolog,FoxPro,易語言等。

  3、專用語言:CAD系統中的繪圖語言和DBMS的數據庫查詢語言。

  4、腳本語言:又被稱為擴建的語言或者動態語言,用來控制軟件應用程序,腳本通常以文本(如ASCII)保存,只在被調用時進行解釋或編譯。腳本語言是為了縮短傳統的編寫-編譯-鏈接-運行過程而創建的計算機編程語言。一個腳本通常是解釋運行而非編譯。在許多方面,高級編程語言和腳本語言之間互相交叉,二者之間沒有明確的界限。一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。

二、高級語言分類

  編譯型語言、解釋型語言、混合型語言

  1、編譯型語言:編譯型語言首先將源代碼“翻譯”生成目標代碼(機器語言),再由機器運行機器碼(二進制),其目標程序可以脫離其語言環境獨立執行。編譯只需一次,以後要運行就不需要重新編譯,所以編譯型語言執行效率高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(* .OBJ)才能執行,只有目標文件而沒有源代碼,修改很不方便。編譯由編譯器完成。如果我們寫的程序代碼都包含在一個源文件中,那麽通常編譯之後就會直接生成一個可執行文件,我們就可以直接運行了。但對於一個比較復雜的項目,為了方便管理,我們通常把代碼分散在各個源文件中,作為不同的模塊來組織。這時編譯各個文件時就會生成目標文件(Object file)而不是前面說的可執行文件。一般一個源文件的編譯都會對應一個目標文件。這些目標文件裏的內容基本上已經是可執行代碼了,但由於只是整個項目的一部分,所以我們還不能直接運行。待所有的源文件的編譯都大功告成,我們就可以最後把這些半成品的目標文件“打包”成一個可執行文件了,這個工作由另一個程序負責完成,由於此過程好像是把包含可執行代碼的目標文件連接裝配起來,所以又稱為鏈接(Link),而負責鏈接的程序就叫……就叫鏈接程序(Linker)。鏈接程序除了鏈接目標文件外,可能還有各種資源,像圖標文件啊、聲音文件啊什麽的,還要負責去除目標文件之間的冗余重復代碼,等等。鏈接完成之後,一般就可以得到我們想要的可執行文件了。

  2、解釋型語言:解釋性語言編寫的程序不進行預先編譯,以文本方式存儲程序代碼。在發布程序時,看起來省了道編譯工序。但是,在運行程序的時候,解釋性語言必須先解釋再運行。一般來說,現有的解釋性語言都是采用的逐行解釋一句,執行一句這樣的方式來構建的。這樣解釋性語言每執行一次就要翻譯一次,效率比較低 。解釋型程序中,由於程序總是以源代碼的形式出現,因此只要有相應的解釋器,移植幾乎不成問題。釋程序的優點是當語句出現語法錯誤時,可以立即引起程序員註意,而程序員在程序開發期間就能進行校正。

  3、混合型:Java很特殊,Java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是 編譯稱為字節碼,然後在Java虛擬機上用解釋方式執行字節碼。Python 的也采用了類似Java的編譯模式,先將Python程序編譯成Python字節碼,然後由一個專門的 Python字節碼解釋器負責解釋執行字節碼。

編譯型vs解釋型

編譯型
優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高。可以脫離語言環境獨立運行。

缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。

解釋型
優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

三、動態語言和靜態語言

  通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型(數據類型)語言。

  1、動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。

  2、靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。

四、強類型定義語言和弱類型定義語言

  1、強類型定義語言強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那麽它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那麽程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。

  2、弱類型定義語言數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不同數據類型的值。

  強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
  例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

PYTHON之計算機語言基礎知識 —— 編程語言的分類