2019 年 8 月底,華為方舟編譯器(OpenArkCompiler)正式開源。一年多來,方舟編程體系陸續實現了編譯器、引擎、調試器的開源。
方舟編譯器的「走紅」,也讓編譯器這一技術性話題逐漸廣為人知。那麼,編譯器的重要性有哪些?中國在編譯器方面是怎樣的現狀?還有哪些不足?
近日,DeepTech 和鑑釋科技首席架構師劉新銘進行了對話。他目前主導該公司面向 DevOps 的靜態代碼分析工具的核心研發工作,曾任惠普編譯器技術實驗室主任,領導基於惠普安騰處理器的編譯器開發工作。在開發和交付高性能計算系統(HPC) 編譯器和性能分析工具方面擁有數十年經驗。
以下為整理後的採訪實錄:
DeepTech:您覺得編譯器對於作業系統以及生態的重要性體現在哪些方面?
劉新銘:我的第一個觀點是編譯器一定要做。編譯器是世界上第一個電腦軟體。在沒有編譯器之前,只能靠會寫彙編的人去編譯電腦軟體。這需要很大的工作量,而且需要很高的專業技術能力。所以編譯器的存在是非常有必要的。有了編譯器才會有作業系統,才會有生態。所以如果國內不做好自己的編譯器,就很難在這個生態中紮根。在 2000 年左右,谷歌剛創立時只招聘兩種人:第一種是做作業系統的人;第二種是做編譯器的人,其餘一概不招。如果按照當時谷歌的條件在國內的軟體行業去篩選人才,可以寫核心算法的人,目前在全國也許不超過 300 人。
所以想要紮根,編譯器是一個開始,需要給予足夠的重視。但這是一條很艱辛的路程。比如在之前 2000 年到 2010 年左右,我在美國負責安騰伺服器生態系統的編譯器部分的工作。為了要完成這個生態系統,公司設定了一個目標,要達到 6000 個應用以上,並且要調到最優,才能賣出去。
很多人認為開源很好,可是開源在國內常會變成拿來主義:自己做的東西不開源,老用別人開源的東西。但是這種做法不可持續,在三兩年之後,很可能自己的東西和開源的東西無法融合在一起。
我的第二個觀點就是編譯器不但要做,還要掌握控制權。要有我們自己的創新性和自主性,而且要有發言權。比如中國的軟體在國外是沒有發言權的,我們做得再好,對方不允許進入或者需要等很久,也是沒有用的,因為它開源的軟體可能已經達到很高的高度。每次整合,都需要花費六個月。所以發言權很重要,在 GCC (GNU Compiler Collection,GNU編譯器套件)的領域,我們需要守門人(gate keeper)點頭。等守門人點頭排隊就需要三個月。就鴻蒙和方舟而言,中國人可以自己有發言權,這是很重要的。「點頭」 這件事請的重要性很多人尚未意識到。要有 「點頭」 的權力,最重要是要有優秀的人才,這樣才能做開源、做需要的創新。比如我在這方面有幾十年的工作經驗,技術水平超越了很多人,對編譯器有深度的了解,去管理這門技術的研發別人才會信服我。
第三個觀點,我認為做軟體不能浮躁,要靜下心來做事。我們需要長時間的積累,也要鼓勵年輕人做技術上的積累,不斷學習、不斷思考,要有和鍾南山一樣的精神。
DeepTech:您感覺我們現在國內的編譯器生態相較國外是怎樣的狀況?
劉新銘:我認為差距又增加了一年。我們仍然沒有在做核心的事情,無法做核心的事情,就無法進入主流,無法引領未來的趨勢。
比如 2018 年圖靈獎,兩位獲獎者,一位是斯坦福的 John LeRoy Hennessy(約翰軒尼詩)教授,還有 UC 伯克利分校教授的 David Patterson(大衛帕特森),他們兩位合力做出了現在 CPU 基礎架構設計的理念和方法。即現在最流行的晶片,包括 ARM 晶片在內都在用的 RISC 伺服器。
對於摩爾定律結束後,該如何繼續推動 IT 繼續發展,他們認為需要依靠:特殊場景的語言 (domain-specific language/DSL)、特殊場景的編譯器 (domain-specific compiler)、特殊場景的架構 (domain-specific architecture)。特殊場景,我認為這四個字可換為 AI。谷歌在做 AI 的語言,仍在進行中。國內迎頭趕上比較難,因為多數做晶片的公司,都將資源集中至硬體方面,做軟體的資源不足,做不了編譯器,這是事實。有目共睹的是,別人看到我們只做硬體,所以先從軟體方面卡脖子。
DeepTech:您覺得國內如果想突破的話,應該如何去做?
劉新銘:首先,我們的產業界要合作,不應該再單打獨鬥。打個比方來說,十家企業一人一塊錢,一共十塊錢,凝聚在一起,十塊錢能做的事遠比一塊錢要多。產業要合作,把各方的資源整合在一起,發揮優勢,凝聚起來,在做好硬體的同時,去做軟體,做編譯系統。第二,既然要合作,就不要各自為營,各做各的,需要配合協作。
第三,需要重視人才的培養。全國還在教編譯器的學校幾乎已經不存在。我們需要把編譯器這門課變成選修課,提起我國學生對編譯器的興趣。當然教師也需要改變觀念,不僅僅是寫好學術論文,要做基礎建設,更要注重實踐。比如國外的一些老師做研究前都會搭一個完整的架構。所以國內的老師們可以改變觀念,用方舟做我們自己的軟體編譯器的基礎架構,而不是用國外的。