《好學的C++》“小知識”選摘(一):計算機是如何翻譯程式的
編者注:《好學的C++》一書中穿插介紹了一些在C++領域裡發生的,但卻波及到全世界的事件,內容涉及電腦科學、程式設計技術發展史、數學、哲學以及人工智慧等許多領域。學累了可以稍微放鬆一下,讀一讀這些小文章。
一些有關程式設計的教科書告訴我們:計算機根本不懂C++語言,所有的C++語句都必須先被翻譯成機器碼才能拿到計算機上去執行。可是這種翻譯又是由誰完成的呢?
“噢,這沒什麼可奇怪的,”那些教科書說,“這種翻譯是由編譯器(它本身也是一個計算機程式)完成的。至於編譯器本身,它是由計算機翻譯出來的。”
在我剛開始學習如何程式設計的時候,這在我看來就是一個解不開的死結。CPU(位於計算機中心的“大腦”)連一個C++單詞都不懂,卻能在C++和它自己的內部語言之間扮演翻譯官的角色,這不是自相矛盾嗎?
這個問題的答案隱藏在這個事實的背後:C++原始碼被儲存在一個文字檔案裡,就像你儲存一篇論文或一份備忘錄那樣。正如我剛才指出的,文字字元是以數值形式儲存的。於是,當計算機來處理這種資料的時候,它其實是在按照另外一套精確的規則進行另一種形式的數值運算、資料求值和決策判斷。
如果你還沒有徹底明白,再來想象一下:一位只懂日語但不懂任何英語的老兄給你寫了一封信,可你本人只懂英語,對日語是一竅不通。(我要對行為學家John Searle表示感謝,是他在他的“中文房間”思想實驗裡最先提出這個點子的。 )
現在,假設你手裡有一本告訴你如何把日語字元翻譯成英語單詞的說明書。這本說明書本身是用英語寫的,所以你用起來毫無問題。
好了,儘管你不懂日語,但只要你肯認真地查說明書,就有能力把日語如願翻譯成英語。 從某種意義上講,一個計算機程式就是一本給CPU看的說明書。每一個計算機程式都是一個由指令和資料構成的序列,各種各樣的計算機程式匯聚成了計算機裡的“知識”。程式使得計算機有能力做任何事情——包括翻譯一個內容為C++原始碼的文字檔案。
應該承認,編譯器是一種非常特殊的程式,但它做的事情並不是不可能實現的天方夜譚。作為計算機程式,編譯器就是一本我們剛才描述的“說明書”,它告訴計算機應該如何讀取一個內容為C++原始碼的文字檔案和輸出另外一本“說明書”:這份輸出就是程式的可執行程式碼。
最開始的第一版編譯器只能用機器碼來編寫。然後,老編譯器又可以用來編寫新編譯器,隨著這步步為營的過程的發展,甚至連那些高階程式設計師也越來越不需要編寫機器碼了。
相關文章
- 《好學的C++》“小知識”選摘(二):斐波那契是何許人也C++
- 《好學的C++》“小知識”選摘(三):OOP值得我們去學習嗎C++OOP
- [翻譯]每一個計算機專業的學生應該知道的知識(一)計算機
- Java程式設計常用計算機小知識Java程式設計計算機
- 我是如何學習計算機程式設計的計算機程式設計
- 計算機網路體系小知識計算機網路
- [譯]計算機如何高效識別影象?計算機
- [譯]計算機如何高效識別影像?計算機
- 【雲端計算小知識】什麼是雲端計算?雲端計算特點是什麼?
- 轉摘_計算機cpu架構基礎知識_IA32_etc計算機架構
- Linux小知識翻譯-「路徑設定」Linux
- 關於C++ scanf的一個小知識C++
- 計算機Windows系統最佳化小知識計算機Windows
- 【計算機二級C++】題目與C++知識自檢計算機C++
- 計算機網路——基礎知識(一)計算機網路
- 計算機基礎知識(自我的理解)計算機
- 淺談計算機圖書的翻譯——“增值翻譯”的幾個參考例子 (轉)計算機
- 【翻譯】前端開發者應掌握的基本知識前端
- C++中一個名字查詢的小知識C++
- 計算機硬核知識大全計算機
- [翻譯]高德納(Knuth)談計算機程式設計藝術(下)計算機程式設計
- [翻譯]高德納(Knuth)談計算機程式設計藝術(上)計算機程式設計
- 如何學習一門計算機程式語言計算機
- 如何選擇一款好的智慧車牌識別相機
- 計算機視覺的特定詞翻譯(持續更新)計算機視覺
- 計算機初面面試必考的計算機網路知識點梳理面試計算機網路
- 計算機組成原理基礎知識(一)計算機
- Android | 教你如何開發一個拍照翻譯小程式Android
- 我是如何學習小程式的
- 好程式設計師雲端計算教程分享Mysql技術知識點程式設計師MySql
- 每個程式設計師應該知道的計算機網路知識程式設計師計算機網路
- 計算機網路知識點計算機網路
- 計算機網路知識解析計算機網路
- 計算機知識碎碎念計算機
- UC Berkeley EECS是如何培養計算機學生的計算機
- 【計算機網路知識掃盲】03、計算機網路的功能(轉)計算機網路
- 【計算機網路知識掃盲】02、計算機網路的概念(轉)計算機網路
- 一網打盡:Java 程式設計師必須瞭解的計算機底層知識!Java程式設計師計算機