備注:這是我問答內(nei) 容的一個(ge) 精編版,增加了一些內(nei) 容,所以和原內(nei) 容略有不同。
去年底,有中國開發者已經開發出文言文編程語言,並在GitHub上摘得了5500星,在國內(nei) 引起不小反響。這件事給普通人的印象是,科技發展日新月異,電腦CPU太厲害,都能讀懂文言文了!
CPU真的能看懂文言文代碼嗎?答案是CPU既看不懂文言文代碼,也看不懂英文代碼。
現在的CPU晶體(ti) 管數量動輒幾十億(yi) 個(ge) ,結構非常複雜,但內(nei) 部傳(chuan) 輸的信號隻有兩(liang) 種:高電壓和低電壓,分別代表數字信號“1”和“0”(也有相反的),因此CPU唯一能看懂的就是由“1”和“0”組成的代碼。
由於(yu) 程序(代碼)存儲(chu) 在電腦硬盤中時,也是“1”和“0”的形式,是否就意味著,隻要程序存到硬盤中,CPU就能認識呢?
答案是CPU仍然看不懂這些程序,因為(wei) 以“1”和“0”位模式存儲(chu) 的程序和以“1”和“0”寫(xie) 成的機器語言完全是兩(liang) 回事,簡單說,兩(liang) 者的區別類似於(yu) 漢語書(shu) 和英語書(shu) 都用紙和油墨印製,但依然是兩(liang) 種不同的語言,不會(hui) 英語的依然看不懂英語書(shu) 。
機器語言是CPU唯一能看懂的語言,也是第一代編程語言。
圖片說明:早期的計算機程序員使用機器語言編程,將用0和1數字編成的程序代碼打在紙帶或卡片上(打孔代表1,不打孔代表0),再將它通過紙帶機或卡片機輸入計算機,進行運算。
機器語言的最大特點是麵向計算機硬件編程,簡單說就是程序員需要通曉計算機硬件星空体育官网入口网站,寫(xie) 的程序要真實表示數據是如何被計算機操縱的。對程序員來說這就比較頭大,一方麵不僅(jin) 需要通曉計算機硬件星空体育官网入口网站,另一方麵如果計算機使用了不同的硬件,那麽(me) 就得重新編程。
畢竟上得了“廳堂”(搞掂硬件)下得了“廚房”(玩得轉軟件),隻有少數大神能做到,加上機器語言純用“0”和“1”序列組成,非常單調枯燥,不僅(jin) 扼殺了編程的趣味,而且對視力也是一種考驗,稍微一眼花,看錯1或0的排列位置,就會(hui) 製造一個(ge) 大BUG。
於(yu) 是,有一幫人開始琢磨了:能不能將計算機硬件從(cong) 編程中分離出來,讓硬件星空体育官网入口网站小白也能編程?
最先開竅的是藍色巨人IBM,它在其System/360計算機中引入了ISA(Instruction Set Architecture)概念,將編程所需要了解的硬件信息從(cong) 硬件中抽象出來,這樣編程人員就可以麵向ISA編程。由於(yu) ISA是用來描述編程時用到的抽象機器(不是具體(ti) 的電腦CPU),包括了一套指令集和一些寄存器,因此,程序員隻要知道ISA,不需要了解具體(ti) 的硬件星空体育官网入口网站,就可以編寫(xie) 程序,在ISA相同的電腦上運行。
這樣一來,就出現了匯編語言,但匯編語言用符號寫(xie) 成,還是不夠接地氣兒(er) ,於(yu) 是高級語言就誕生了。高級語言的誕生,使程序員將精力從(cong) 複雜的計算機結構轉移到要解決(jue) 的問題,從(cong) 而可以專(zhuan) 心烹調程序大餐。
由此也可以看出,現在的程序員並不都是了解計算機硬件的,所以妹子們(men) 不要指望自己的程序員男朋友給你DIY電腦,或者電腦壞了,他能給你省下一筆修理費。他說不會(hui) 修,那就是真的不會(hui) 修。
自從(cong) 高級語言出現後,人類開始了在編程語言上的放飛自我,經過數十年的發明創造,現在的高級編程語言已超過2500種,像比較知名的C++和Java等,都屬於(yu) 高級語言。
極客漫畫《編程語言之戰》,展示的是高級編程語言之間的市場競爭(zheng) ,也揭示了高級編程語言多如牛毛。
但問題出現了,CPU能理解的機器語言還是那個(ge) 機器語言,幾十年來沒有變化,讓它讀懂高級語言那是不可能的。
怎麽(me) 辦?
其實,早在高級語言出現之前的匯編語言時代,聰明的計算機研發人員就開發出了專(zhuan) 門的程序,用來將匯編語言和高級語言翻譯成機器語言,其過程相當於(yu) 將英語名著翻譯成漢語著作。
說白了,這種翻譯程序相當於(yu) 人類中的翻譯家。
翻譯程序有兩(liang) 種工作方法:編譯和解釋,相應的程序名稱是編譯器和解釋器。兩(liang) 者的區別是,編譯是在執行前把整個(ge) 源程序(高級語言程序)翻譯成目標程序(機器語言程序),而解釋是一次隻翻譯和執行源程序中的一行。
打個(ge) 形象的比方,解釋器相當於(yu) 發布會(hui) 的實時翻譯,演講的嘉賓說一句,實時翻譯馬上翻譯一句。編譯器則相當於(yu) 著作翻譯家,整本翻譯完成後,再讓出版社印刷上市。
經過翻譯程序的努力,現在CPU能看懂程序員寫(xie) 的程序了。當然,用開頭提到的文言文編程語言編寫(xie) 的程序想要讓CPU看懂,還得多一道翻譯步驟,即要麽(me) 翻譯成Javascript,要麽(me) 翻譯成Python。多轉了一圈,不知道程序執行效率如何。
由於(yu) CPU不能直接理解用高級語言寫(xie) 成的代碼,必須依賴翻譯程序翻譯成機器語言,因此翻譯程序可以極大地影響甚至決(jue) 定處理器性能的發揮。如果沒有一個(ge) 好的翻譯程序,那麽(me) CPU的性能再強大,也好比茶壺裝的餃子,倒不出來。
正因為(wei) 如此,穀歌在安卓4.4之後,拋棄了Dalvik虛擬機,改為(wei) ART,實際是將翻譯程序從(cong) 解釋器切換到編譯器,發揮了芯片的性能,提高了程序運行效率。
現在,手機大廠包括華為(wei) 、OPPO和vivo都開始重視編譯器開發,說到底就是為(wei) 了發揮芯片性能,讓它不再成為(wei) 倒不出餃子的茶壺。
最後總結一下,用翻譯程序把程序員編寫(xie) 的程序翻譯成二進製代碼的機器語言後,CPU就能看懂代碼了,而且翻譯程序的優(you) 劣可以影響乃至決(jue) 定CPU性能發揮。
關(guan) 注【深圳科普】微信公眾(zhong) 號,在對話框:
回複【最新活動】,了解近期科普活動
回複【科普行】,了解最新深圳科普行活動
回複【研學營】,了解最新科普研學營
回複【科普課堂】,了解最新科普課堂
回複【團體(ti) 定製】,了解最新團體(ti) 定製活動
回複【科普基地】,了解深圳科普基地詳情
回複【口罩】,預約報名官方口罩免費領取
回複【科學防控】,學習(xi) 疫情相關(guan) 科普星空体育官网入口网站
回複【科普小達人】,報名參賽贏取萬(wan) 元大獎

