1. 程式人生 > 實用技巧 >2、程式語言介紹及分類

2、程式語言介紹及分類

目錄

一、程式語言的介紹... 1

二、程式語言的分類... 1

1、機器語言:... 1

2、組合語言:... 2

3、高階語言:... 4

(1)、編譯型... 4

(2)、解釋型:... 5

(4)、混合型語言... 5

5、總結:... 6


程式語言的介紹

一、程式語言的介紹

程式語言(programming language)可以簡單的理解為一種計算機和人都能識別的語言。一種計算機語言讓程式設計師能夠準確地定義計算機所需要使用的資料,並精確地定義在不同情況下所應當採取的行動。[1]

程式語言處在不斷的發展和變化中,從最初的機器語言發展到如今的2500種以上的高階語言,每種語言都有其特定的用途和不同的發展軌跡。程式語言並不像人類自然語言發展變化一樣的緩慢而又持久,其發展是相當快速的,這主要是

計算機硬體網際網路IT業的發展促進了程式語言的發展。

二、程式語言的分類

1、機器語言:

是站在計算機(奴隸)的角度,說計算機能聽懂/理解的語言,而計算機能直接理解的就是二進位制指令,所以機器語言就是直接用二進位制程式設計,這意味著機器語言是直接操作硬體的,因此機器語言屬於低階語言,此處的低階指的是底層、貼近計算機硬體(貼近代指需要詳細瞭解計算機硬體細節、直接控制硬體)

#機器語言

用二進位制程式碼0和1描述的指令稱為機器指令,由於計算機內部是基於二進位制指令工作的,所以機器語言是直接控制計算機硬體。

用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令程式碼以及程式碼的含義,然後在編寫程式時,程式設計師得自己處理每條指令和每一資料的儲存分配和輸入輸出,還得記住程式設計過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程式花費的時間往往是實際執行時間的幾十倍或幾百倍。而且,編出的程式全是些0和1的指令程式碼,直觀性差,不便閱讀和書寫,還容易出錯,且依賴於具體的計算機硬體型號,侷限性很大。除了計算機生產廠家的專業人員外,絕大多數的程式設計師已經不再去學習機器語言了。

機器語言是被微處理器理解和使用的,存在有多至100000種機器語言的指令,下述是一些簡單示例

#指令部份的示例

0000 代表 載入(LOAD)

0001 代表 儲存(STORE)

...

#暫存器部份的示例

0000 代表暫存器 A

0001 代表暫存器 B

...

#儲存器部份的示例

000000000000 代表地址為 0 的儲存器

000000000001 代表地址為 1 的儲存器

000000010000 代表地址為 16 的儲存器

100000000000 代表地址為 2^11 的儲存器

#整合示例

0000,0000,000000010000 代表 LOAD A, 16

0000,0001,000000000001 代表 LOAD B, 1

0001,0001,000000010000 代表 STORE B, 16

0001,0001,000000000001 代表 STORE B, 1[1]

2、組合語言:

組合語言僅僅是用一個英文標籤代表一組二進位制指令,毫無疑問,比起機器語言,組合語言是一種進步,但組合語言的本質仍然是直接操作硬體,因此組合語言仍是比較低階/底層的語言、貼近計算機硬體

#組合語言
組合語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的識別符號,更容易識別和記憶。它同樣需要程式設計者將每一步具體的操作用命令的形式寫出來。彙編程式的每一句指令只能對應實際操作過程中的一個很細微的動作。例如移動、自增,因此彙編源程式一般比較冗長、複雜、容易出錯,而且使用匯編語言程式設計需要有更多的計算機專業知識,但組合語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高階語言所能夠實現的,而且源程式經彙編生成的可執行檔案不僅比較小,而且執行速度很快。
彙編的hello world,列印一句hello world, 需要寫十多行,如下
; hello.asm 
section .data ; 資料段宣告
 msg db "Hello, world!", 0xA ; 要輸出的字串
 len equ $ - msg ; 字串長度
 section .text ; 程式碼段宣告
 global _start ; 指定入口函式
 _start: ; 在螢幕上顯示一個字串
 mov edx, len ; 引數三:字串長度
 mov ecx, msg ; 引數二:要顯示的字串
 mov ebx, 1 ; 引數一:檔案描述符(stdout) 
mov eax, 4 ; 系統呼叫號(sys_write) 
int 0x80 ; 呼叫核心功能
 ; 退出程式
 mov ebx, 0 ; 引數一:退出程式碼
 mov eax, 1 ; 系統呼叫號(sys_exit) 
int 0x80 ; 呼叫核心功能

3、高階語言:

高階語言是用人類的字元去編寫程式,而人類的字元是在向作業系統傳送指令,而非直接操作硬體,所以高階語言是與作業系統打交道的,此處的高階指的是高層、開發者無需考慮硬體細節,因而開發效率可以得到極大的提升,但正因為高階語言離硬體較遠,更貼近人類語言,人類可以理解,而計算機則需要通過翻譯才能理解,所以執行效率會低於低階語言。按照翻譯的方式的不同,

高階語言又分為兩種:

(1)、編譯型

C、C++、Ada、Pascal都是編譯實現的。類似谷歌翻譯,是把程式所有程式碼編譯成計算機能識別的二進位制指令,之後作業系統會拿著編譯好的二進位制指令直接操作硬體,詳細如下

# 1、執行效率高

編譯是指在應用源程式執行之前,就將程式原始碼“翻譯”成目的碼(即機器語言),

因此其目標程式可以脫離其語言環境獨立執行,使用比較方便,執行效率較高。

# 2、開發效率低:

應用程式一旦需要修改,必須先修改原始碼,然後重新編譯、生成新的目標檔案才能執行,

而在只有目標檔案而沒有原始碼,修改會很不方便。所以開發效率低於解釋型

# 3、跨平臺性差

編譯型程式碼是針對某一個平臺翻譯的,當前平臺翻譯的結果無法拿到不同的平臺使用,針對不同的平臺必須重新編譯,即跨平臺性差

# 其他

現在大多數的程式語言都是編譯型的。

編譯程式將源程式翻譯成目標程式後儲存在另一個檔案中,該目標程式可脫離編譯程式直接在計算機上多次執行。

大多數軟體產品都是以目標程式形式發行給使用者的,不僅便於直接執行,同時又使他人難於盜用其中的技術。

(2)、解釋型:

Tcl、Perl、Ruby、VBScript、JavaScript等都是解釋型,類似同聲翻譯,需要有一個直譯器,直譯器會讀取程式程式碼,一邊翻譯一邊執行,詳細如下

# 1、執行效率低

解釋型語言的實現中,翻譯器並不產生目標機器程式碼,而是產生易於執行的中間程式碼。

這種中間程式碼與機器程式碼是不同的,中間程式碼的解釋是由軟體支援的,不能直接使用硬體,

軟體直譯器通常會導致執行效率較低。

# 2、開發效率高

用解釋型語言編寫的程式是由另一個可以理解中間程式碼的解釋程式執行的,與編譯程式不同的是,

解釋程式的任務是逐一將源程式的語句解釋成可執行的機器指令,不需要將源程式翻譯成目的碼再執行。

解釋程式的優點是當語句出現語法錯誤時,可以立即引起程式設計師的注意,而程式設計師在程式開發期間就能進行校正。

# 3、跨平臺性強

程式碼執行是依賴於直譯器,不同平臺有對應版本的直譯器,所以解釋型的跨平臺性強

# 其他

對於解釋型Basic語言,需要一個專門的直譯器解釋執行Basic程式,每條語句只有在執行時才被翻譯,

這種解釋型語言每執行一次就翻譯一次,因而效率低下。一般地,動態語言都是解釋型的,

(4)、混合型語言

Java是一類特殊的程式語言,Java程式也需要編譯,但是卻沒有直接編譯為機器語言,而是編譯為位元組碼,

然後在Java虛擬機器上以解釋方式執行位元組碼。

三、總結:

#1、執行效率:機器語言>組合語言>高階語言(編譯型>解釋型)

#2、開發效率:機器語言<組合語言<高階語言(編譯型<解釋型)

#3、跨平臺性:解釋型具有極強的跨平臺型