1)簡述編譯程序與翻譯程序、彙編程序的聯繫與區別。算法
彙編程序是一個翻譯程序,它把彙編語言程序編譯成機器語言程序。編程
編譯程序是一個語言處理程序,它把一個高級語言翻譯成某個機器的彙編語言程序或二進制代碼程序,這個二進制代碼程序在機器上運行以生成結果。它的基本任務是將源語言程序翻譯成等價的目標語言程序。工具
翻譯程序是指把高級語言源程序翻譯成機器語言源程序(目標代碼)的軟件。優化
區別與聯繫:彙編程序是屬於面向機器的低級語言,編譯程序是屬於面向應用的高級語言。編譯程序和彙編程序都屬於翻譯程序。翻譯
2)編譯過程包括哪幾個主要階段及每一個階段的主要功能。設計
一共分爲6個階段。開發
一、詞法分析:從左到右一個字符一個字符地讀入源程序,對構成源程序的字符流進行掃描和分解,從而識別出一個個單詞。文檔
二、語法分析:在詞法分析的基礎上將單詞序列分解成各種語法短語。get
三、語義分析:審查源程序有無語義錯誤,爲代碼生成階段收集類型信息。編譯器
四、中間代碼生成:編譯程序將源程序變成一種內部表示形式。
五、代碼優化:對前一階段產生的中間代碼進行變換或進行改造,使生成的目標代碼更爲高效。
六、目標代碼生成:把中間代碼變換成特定機器上的絕對指令或可重定位的指令代碼或彙編指令代碼。
3)簡述解釋程序與編譯程序的區別。
一、編譯程序是先翻譯再執行,解釋程序是邊翻譯邊執行。
二、編譯程序產生目標程序,解釋程序不產生目標程序。
三、編譯程序適合對通用性,重複性,高效性有要求的系統,相比解釋程序更具靈活性。
4)瞭解新開源的華爲方舟編譯器(https://www.openarkcompiler.cn/home),理解並談談它的基本思想與採用的技術路線,以及它對安卓軟件生態會有什麼影響。
方舟編譯器提供了表示(IR)和語言編譯實現,同時搭配編譯器其餘二進制組件,實現Java程序到aarch64彙編指令的編譯過程。開發者可基於開源代碼+二進制,編譯構建出編譯器工具鏈,嘗試對Java程序進行編譯。
方舟編譯器並不單單是從高級語言到機器碼進行了「萬能翻譯」,而是成爲一個編譯運行系統。這個編譯系統不只實現了詞法分析、語法分析、代碼生成等功能,更在IR設計和算法優化方面進行了深刻地嘗試,它可供開發者,在開發環境一次性將高級語言編譯爲機器碼,能夠讓手機安裝的APP運行效率明顯提高。
相比於安卓原生系統,方舟編譯器能夠明顯提高系統運行效率。值得一提的是,華爲在國內EMUI在歷代版本的更新當中,除了Linux的安卓內核外,已逐步把安卓系統的不少部分替代了。方舟編譯器也是其中關鍵步驟之一,取代了安卓原生系統虛擬機的位置。
參考文檔:
一、華爲方舟編譯器開源正式上線 https://consumer.huawei.com/cn/press/news/2019/fangzhou-complier-launch/
二、最前線 華爲編譯器正式開源 https://36kr.com/p/5241961