跳轉到內容

計算機系統基礎:程式語言分類

來自華夏公益教科書,開放的書籍,開放的世界

論文 2 - ⇑ 計算機系統基礎 ⇑

← 作業系統 (OS) 的作用 程式語言分類 程式翻譯器型別 →


有很多種程式語言,你可能已經聽說過其中的一些,例如:C++、VB.NET、Java、Python、Assembly。我們現在將回顧這些語言的起源歷史以及它們仍然適用的領域。在所有情況下,請記住,計算機執行的唯一東西是機器程式碼或目的碼,這是從一種語言轉換為在處理器上執行的程式碼。

第一 第二 第三 第四
程式碼示例

10101010011000101
10011010100000010
11111111101000101

LDA 34
ADD #1
STO 34
x = x + 1
body.top { color : red;
           font-style : italic
}
語言 (低階) 機器程式碼 (低階) 彙編程式碼 (高階) Visual BasicCpython 等。 (高階) SQLCSSHaskell 等。
與目的碼的關係
(一般來說)
-- 一對一 一對多 一對多

第一代

[編輯 | 編輯原始碼]
Colossus Mark 2 是世界上第一臺電子數字可程式設計計算機。操作人員必須透過設定開關直接編寫機器程式碼。

第一代程式語言是純機器程式碼,也就是 1 和 0,例如:. 程式設計師必須手動設計程式碼,然後使用穿孔卡片、穿孔紙帶或撥動開關將其傳輸到計算機。無需翻譯程式碼,它會立即執行。這聽起來可能很古老,但它有一些優勢

plus point程式碼可以快速高效
plus point程式碼可以利用特定的處理器功能,例如特殊暫存器


當然也有缺點

minus point程式碼無法移植到其他系統,必須重新編寫
minus point程式碼難以編輯和更新


第二代程式設計

[編輯 | 編輯原始碼]

第二代程式語言是描述彙編程式碼的一種方式,你可能已經遇到過。

透過使用類似英語的程式碼,程式設計變得容易得多。使用這些像LDA 載入和STA 儲存這樣的助記符程式碼意味著程式碼更容易閱讀和編寫。要將彙編程式碼程式轉換為在計算機上執行的目的碼,需要一個彙編器,並且彙編的每一行都可以被等效的一行目標(機器)程式碼替換

彙編程式碼 目的碼
LDA A
ADD #5
STA A
JMP #3

-> 彙編器 ->

000100110100
001000000101
001100110100
010000000011

彙編程式碼與用機器程式碼編寫具有相似的優勢,畢竟它是一種一對一的關係。這意味著彙編程式碼通常用於為特定硬體編寫低階快速程式碼。直到最近,機器程式碼還被用於程式設計手機等裝置,但隨著C 等語言的速度和效能非常接近彙編,而且 C 能夠與處理器暫存器進行通訊,彙編的使用正在下降。

正如你所見,第二代語言比第一代語言有優勢,此外,還有其他一些使組合語言很棒的特點

plus point程式碼可以快速高效
plus point程式碼可以利用特定的處理器功能,例如特殊暫存器
plus point因為它更接近純英語,所以與機器程式碼相比,它更容易閱讀和編寫


當然也有缺點

minus point程式碼無法移植到其他系統,必須重新編寫


第三代(高階語言)

[編輯 | 編輯原始碼]

儘管彙編程式碼比機器程式碼更容易閱讀,但執行迴圈和條件語句仍然不直觀,編寫大型程式會是一個緩慢的過程,並會建立大量的goto 語句和跳轉。第三代程式語言為程式碼帶來了許多程式設計師友好的特性,例如迴圈、條件語句、類等。這意味著一行第三代程式碼可以生成許多行目標(機器)程式碼,在編寫程式時節省了大量時間。

命令式語言 - 程式碼按程式設計師定義的順序一行一行地執行

第三代(高階語言)程式碼是命令式的。命令式意味著程式碼按順序一行一行地執行。例如

dim x as integer
x = 3
dim y as integer
y = 5
x = x + y
console.writeline(x)

輸出結果為:8

第三代語言可以是平臺無關的,這意味著為一個系統編寫的程式碼將在另一個系統上執行。要將第三代程式轉換為目的碼,需要一個編譯器或一個直譯器

總結

plus point硬體無關性,可以輕鬆移植到其他系統和處理器
優點節省時間,對程式設計師友好,一行第三代語言程式碼相當於第一代和第二代語言的許多行程式碼。


然而

缺點生成的程式碼可能無法像第一代和第二代語言那樣充分利用處理器特定的功能。
擴充套件:程式設計正規化

在 A2 中,您將更詳細地學習幾種第三代語言型別,包括:

第四代

[編輯 | 編輯原始碼]

第四代 語言旨在減少程式設計工作量和軟體開發時間,從而降低軟體開發成本。它們並不總是能成功完成此任務,有時會導致程式碼不優雅且難以維護。語言的設計旨在滿足特定目的,例如用於查詢資料庫的語言(SQL)、用於生成報告的語言(Oracle Reports)和用於構建使用者介面的語言(XUL)。第四代程式設計型別的一個例子是宣告式語言。

--an example of a Structured Query Language (SQL) to select criminal details from a database
SELECT name, height, DoB FROM criminals WHERE numScars = 7;
宣告式語言 - 描述應該執行什麼計算,而不是如何執行。並非命令式!


宣告式語言的一個例子是 CSS,您在完成任何網頁設計單元時可能會了解更多關於它的資訊。

/*code to change the headings on a page to green and the paragraphs to red and italic*/
h1 { color : #00FF00; }
p { color : #FF0000; font-style : italic }
練習:程式語言的世代

描述命令式語言的含義。

答案

程式碼逐行執行,按順序執行。

第二代語言程式碼行與目的碼行之間有什麼關係?

答案

一行第二代語言程式碼 = 一行目的碼。

目的碼行與第三代語言程式碼行之間有什麼關係?

答案

一行第三代語言程式碼 = 許多行目的碼。

給出使用第三代語言而不是組合語言的兩個好處。給出其中一個缺點。

答案

  • 編寫和維護更快更容易。
  • 硬體獨立,編寫一次,可以多次使用。
  • 可能缺少低階、處理器特定的功能,這意味著程式碼執行速度更慢。

給出宣告式語言的定義。

答案

描述應該執行什麼計算,而不是如何執行。並非命令式!

對於第二代和第三代語言,給出將語言代轉換為目的碼所需的程式翻譯器。

答案


  • 第二代(彙編)需要彙編器。
  • 第三代需要直譯器或編譯器。
華夏公益教科書