備注:這是我問答內容的一個精編版,增加了一些內容,所以和原內容略有不同。
去年底,有中國開發者已經開發出文言文編程語言,並在GitHub上摘得了5500星,在國內引起不小反響。這件事給普通人的印象是,科技發展日新月異,電腦CPU太厲害,都能讀懂文言文了!
CPU真的能看懂文言文代碼嗎?答案是CPU既看不懂文言文代碼,也看不懂英文代碼。
現在的CPU晶體管數量動辄幾十億個,結構非常複雜,但內部傳輸的信號只有兩種:高電壓和低電壓,分別代表數字信號“1”和“0”(也有相反的),因此CPU唯一能看懂的就是由“1”和“0”組成的代碼。
由于程序(代碼)存儲在電腦硬盤中時,也是“1”和“0”的形式,是否就意味著,只要程序存到硬盤中,CPU就能認識呢?
答案是CPU仍然看不懂這些程序,因爲以“1”和“0”位模式存儲的程序和以“1”和“0”寫成的機器語言完全是兩回事,簡單說,兩者的區別類似于漢語書和英語書都用紙和油墨印制,但依然是兩種不同的語言,不會英語的依然看不懂英語書。
機器語言是CPU唯一能看懂的語言,也是第一代編程語言。
極客漫畫《編程語言之戰》,展示的是高級編程語言之間的市場競爭,也揭示了高級編程語言多如牛毛。
但問題出現了,CPU能理解的機器語言還是那個機器語言,幾十年來沒有變化,讓它讀懂高級語言那是不可能的。
怎麽辦?
其實,早在高級語言出現之前的彙編語言時代,聰明的計算機研發人員就開發出了專門的程序,用來將彙編語言和高級語言翻譯成機器語言,其過程相當于將英語名著翻譯成漢語著作。
說白了,這種翻譯程序相當于人類中的翻譯家。
翻譯程序有兩種工作方法:編譯和解釋,相應的程序名稱是編譯器和解釋器。兩者的區別是,編譯是在執行前把整個源程序(高級語言程序)翻譯成目標程序(機器語言程序),而解釋是一次只翻譯和執行源程序中的一行。