上面由于我生活的空間和木工(指木工工藝,不是工人)沒有共性,所以是不可能翻譯的,但上面翻譯成功了,實際是沒有翻譯的。在木工眼中,那個搖椅只是一些直木和曲木的拼接而已,因為木工空間中根本沒有搖椅的概念,只是我要把那堆木頭當作搖椅,進而使用。如果我把那堆木頭當作兇器,則它就是兇器,不是什么搖椅了。
“廢話加荒謬加放屁!”,也許你會這么大叫,但電腦編程就是這么一回事。CPU只能感知指令和改變內存的狀態(不考慮其他的硬件資源及響應),如果我們編寫了一個計算圓周率的程序,給出了一塊內存,并執行,完成后就看見電腦的屏幕顯示正確的結果。但一定注意,這里電腦實際只是將一些內存的數值復制、加減、乘除而已,電腦并不知道那是圓周率,而如果執行程序的人不把它說成是圓周率那么那個結果也就不是圓周率了,可能是一個隨機數或其他什么的,只是運氣極好地和圓周率驚人地相似。
上面的東西我將其稱為語義,即語言的意義,其不僅僅可應用在電腦編程方面,實際上許多技術,如機械、電子、數學等都有自己的語言,而那些設計師則負責將客戶的簡單程序翻譯成相應語言描述的程序。作為一個程序員是極其有必要了解到語義的重要性的(我在我的另一篇文章《語義的需要》中對代碼級的語義做過較詳細的闡述,有興趣可以參考之),在后續的文章中我還將提到語義以及其對編程的影響,如果你還沒有理解編程是什么意思,隨著后續文章的閱讀應該能夠越來越明了。
電腦編程的基礎知識——編譯器和連接器
我從沒見過(不過應該有)任何一本C++教材有講過何謂編譯器(Compiler)及連接器(Linker)(倒是在很老的C教材中見過),現在都通過一個類似VC這樣的編程環境隱藏了大量東西,將這些封裝起來。在此,對它們的理解是非常重要的,本系列后面將大量運用到這兩個詞匯,其決定了能否理解如聲明、定義、外部變量、頭文件等非常重要的關鍵。
前面已經說明了電腦編程就是一個“翻譯”過程,要把用戶的程序翻譯成CPU指令,其實也就是機器代碼。所謂的機器代碼就是用CPU指令書寫的程序,被稱作低級語言。而程序員的工作就是編寫出機器代碼。由于機器代碼完全是一些數字組成(CPU感知的一切都是數字,即使是指令,也只是1代表加法、2代表減法這一類的數字和工作的映射),人要記住1是代表加法、2是代表減法將比較困難,并且還要記住第3塊內存中放的是圓周率,而第4塊內存中放的是有效位數。所以發明了匯編語言,用一些符號表示加法而不再用1了,如用ADD表示加法等。
由于使用了匯編語言,人更容易記住了,但是電腦無法理解(其只知道1是加法,不知道ADD是加法,因為電腦只能看見數字),所以必須有個東西將匯編代碼翻譯成機器代碼,也就是所謂的編譯器。即編譯器是將一種語言翻譯成另一種語言的程序。
即使使用了匯編語言,但由于其幾乎只是將CPU指令中的數字映射成符號以幫助記憶而已,還是使用的電腦的思考方式進行思考的,不夠接近人類的思考習慣,故而出現了紛繁復雜的各種電腦編程語言,如:PASCAL、BASIC、C等,其被稱作高級語言,因為比較接近人的思考模式(尤其C++的類的概念的推出),而匯編語言則被稱作低級語言(C曾被稱作高級的低級語言),因為它們不是很符合人類的思考模式,人類書寫起來比較困難。由于CPU同樣不認識這些PASCAL、BASIC等語言定義的符號,所以也同樣必須有一個編譯器把這些語言編寫的代碼轉成機器代碼。對于這里將要講到的C++語言,則是C++語言編譯器(以后的編譯器均指C++語言編譯器)。
因此,這里所謂的編譯器就是將我們書寫的C++源代碼轉換成機器代碼。由于編譯器執行一個轉換過程,所以其可以對我們編寫的代碼進行一些優化,也就是說其相當于是一個CPU指令程序員,將我們提供的程序翻譯成機器代碼,不過它的工作要簡單一些了,因為從人類的思考方式轉成電腦的思考方式這一過程已經由程序員完成了,而編譯器只是進行翻譯罷了(最多進行一些優化)。
還有一種編譯器被稱作翻譯器(Translator),其和編譯器的區別就是其是動態的而編譯器是靜態的。如前面的BASIC的編譯器在早期版本就被稱為翻譯器,因為其是在運行時期即時進行翻譯工作的,而不像編譯器一次性將所有代碼翻成機器代碼。對于這里的“動態”、“靜態”和“運行時期”等名詞,不用刻意去理解它,隨著后續文章的閱讀就會了解了。
編譯器把編譯后(即翻譯好的)的代碼以一定格式(對于VC,就是COFF通用對象文件格式,擴展名為.obj)存放在文件中,然后再由連接器將編譯好的機器代碼按一定格式(在Windows操作系統下就是Portable
Executable File
Format——PE文件格式)存儲在文件中,以便以后操作系統執行程序時能按照那個格式找到應該執行的第一條指令或其他東西,如資源等。至于為什么中間還要加一個連接器以及其它細節,在后續文章中將會進一步說明。
也許你還不能了解到上面兩個概念的重要性,但在后續的文章中,你將會發現它們是如此的重要以至于完全有必要在這嘮叨一番。
文章來源于領測軟件測試網 http://www.kjueaiud.com/