官术网_书友最值得收藏!

1.2 編程語言分類

在1.1節的“編程語言極簡史”中列出的語言都是所謂的“高級語言”。這僅僅是編程語言的一類,并且不是“歷史悠久”的那一族,也不是計算機能夠直接識別和運行的。面向計算機的語言是“史前時代”就已經產生的“機器語言”和“匯編語言”。

1.2.1 機器語言

機器語言(Machine Language)是用二進制代碼表示的計算機能夠直接識別和執行的機器指令集合。

如果讀者學習過有關計算機硬件知識,就知道計算機內部是由集成電路(Integrated Circuit,簡稱IC)組成的,包括CPU和內存等。IC有很多引腳(見圖1-2-1),只有直流電壓0V或5V兩個狀態。也就是說,IC的一個引腳只能表示兩個狀態。

IC的這種特性正好與二進制相對應。計算機就將一系列的二進制數字轉變為對應電壓,從而使計算機的電子器件受到驅動,完成指定運算(見圖1-2-2)。

img

圖1-2-1 CPU的引腳

img

圖1-2-2 IC的引腳和二進制

“史前時代”的程序員不得不使用機器語言來工作。他們將用0、1編寫的程序打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機或卡片機輸入到計算機中進行運算。

這是一件多么富有挑戰性的事情。

比如,“Hello World”,如果用機器語言表示,即二進制代碼,應該是這樣的:

img

如果寫成了下面這樣,打印的就不是“Hello World”了。

img

讀者是否可以找出錯誤來?

顯然,機器語言對于人“不友好”。用機器語言寫程序,或許可以獻上敬意,但不值得效仿。

另外,因為機器語言是計算機的設計生產者通過硬件結構賦予計算機的操作功能,所以不同型號計算機的機器語言會有所差別。除了少數專業人員,絕大多數編程者不需要學習機器語言。

所以,對人“友好”的語言應運而生。

1.2.2 匯編語言

匯編語言(Assembly Language)是二進制代碼的文本形式,即使用便于記憶的書寫格式表達機器語言的指令。

圖1-2-3所示的匯編語言示例就是在64位Linux操作系統上運行的。

img

圖1-2-3 匯編語言示例

看不懂圖1-2-3中的代碼也沒有關系。在此只是請讀者看一看匯編語言的基本“模樣”,并非要求理解它。

每種匯編語言專用于某種計算機系統,不能在不同系統之間移植。

匯編語言相對于機器語言而言,已經是人可讀、可編寫的一種編程語言了。但它還非常靠近機器語言,用匯編語言“告訴”計算機干什么和計算機所干的之間(幾乎)是一一對應的,即匯編語言的一條指令對應著一條機器指令。所以,匯編語言依然屬于“低級語言”。

盡管如此,匯編語言現在依然有用武之地,因為它有自身的特點,比如目標程序占用內存少、運行效率高等——當然,這些優點的代價就是開發效率低。在某些特定任務中,還是少不了匯編語言的。

但,本書不以此為內容,而是介紹“高級語言”。

1.2.3 高級語言

“高級語言”(High-level Programming Language)是面向人的語言——It is for Humans(見圖1-2-4)。

img

圖1-2-4 高級語言和低級語言

(源自http://justcode.me/assembly/introduction-assembly-language-examples/)

之所以冠以“高級”之名,是因為這種語言使用了大量的英語單詞,對開發者而言,更容易理解。最重要的是,高級語言擺脫了“硬件的拖累”,不需要與機器語言的指令對應,借助操作系統實現了對硬件的抽象。即使開發者“對硬件一竅不通”,也能利用高級語言開發程序。

圖1-2-5中展示了一段Python程序,其作用是創建一個名為hello.txt的文件,并向這個文件中寫入了“Hello World”。這個操作如果直接面對硬件,需要向磁盤的I/O指定扇區位置寫入數據。但在這段代碼中,絲毫沒有扇區的影子。這是因為Python語言借助操作系統,將這個流程抽象為創建文件的open函數和寫入文件的write函數,并且使用with實現自動關閉的功能。

img

圖1-2-5 創建并寫入文件內容

所以,此語言才“高級”(見圖1-2-6)。

img

圖1-2-6 自然語言和不同的高級語言比較

自20世紀50年代的Fortran語言開始,人類已經發明了好多種高級語言,它們各有千秋,就如同人類自然語言五花八門那樣。每種高級語言都是針對某種“編程”行為,兼顧開發者的知識結構,以及程序的應用場景,制訂了特有的語法規則。

雖然高級語言的語法規則各異,但它們都必須使用“語句”進行表達。高級語言中的“語句”是對計算機指令的抽象(見圖1-2-5),不與機器語言一一對應,“是給人看的”,計算機不能直接識別和執行。比如“a=b+1”,要讓計算機能夠執行,必須“翻譯”為機器語言的三條指令(見圖1-2-7)。

img

圖1-2-7 匯編語言與高級語言比較

計算機是如何“翻譯”的?

主站蜘蛛池模板: 鄯善县| 涡阳县| 蓬莱市| 佳木斯市| 贵定县| 嘉定区| 禹州市| 温州市| 邵东县| 临猗县| 铜鼓县| 会同县| 常宁市| 神农架林区| 望都县| 巴里| 卢龙县| 安平县| 湾仔区| 万山特区| 浏阳市| 封开县| 阿荣旗| 任丘市| 礼泉县| 怀远县| 阿拉善盟| 同仁县| 东源县| 密云县| 汝州市| 五家渠市| 丽水市| 孝昌县| 布拖县| 乐东| 且末县| 平泉县| 集贤县| 全州县| 左云县|