2009年冬,本科計算機《編譯原理》課程結業考試結果公布,雖然取得了不錯的考試成績,可是自己除了熟練掌握了那些艱澀難懂的文法分析算法之外,對編譯器的工作原理仍然貌似“一無所知”。這讓我下定決心在本科畢業設計時,選定了《自定義語言編譯器的設計與實現》這個題目,從此與編譯領域結下了不解之緣。2012年讀研期間,在之前實現的編譯器的基礎上繼而實現了匯編器和靜態鏈接器,並添加了編譯優化器。2013年著手啟動《自己動手構造編譯系統》書稿的撰寫,歷經兩年終於完稿。2016年8月,《自己動手構造編譯系統——編譯、匯編與鏈接》一書正式面市,為自己多年投入該方面的精力和心血圓滿地劃上了句號。
如果不是當初好奇心的驅動,是很難讓自己在編譯的這條路上堅持這麼久的。不過我仍慶幸當初的“一意孤行”,它不僅實現了我構建編譯系統的願望,還讓我繼而完成了專著幫助到更多的人。更重要的是,實現編譯系統的過程對計算機人的專業素養有著巨大的促進作用。從數據結構與算法的增強訓練,到大型軟件系統的設計與構建;從理解離散數學中代數系統和圖論在計算機科學中的作用,到使用數據流和控制流分析進行代碼優化;從設計編程語言每一個單詞和語法,到使用文法分析算法理解程序的語義;從指令系統和二進制文件結構的研究到編譯環境和操作系統運行時環境的深刻理解。可以說,構建編譯系統的過程,涉及了計算機科學從原理到實踐的方方面面。它帶給一個專業學習者的不僅僅是一個軟件系統的實現價值,而是系統級的從計算機底層到上層的全局性認識和理解。
編譯,即便對於在計算機領域工作多年的人來說,也會覺得枯燥乏味。尤其是在高負荷的業務需求的壓力之下,更鮮有人會主動關注它的原理和細節。快餐式的學習確實會在短期內對個人迅速了解未知事物有所幫助,而作為專業人士要保持長期的競爭力,提高專業素養是必不可少而又漫長的過程,了解和學習基礎理論並加以實踐是一種行之有效的方式。我個人踏入工作崗位這兩年多來,一直從事大數據平台構建相關的工作。表面上看來與編譯領域關系不大,但是實踐中發現,當初在實現編譯系統中學習和接觸的計算機的原理和知識,曾無數次間接地幫助我更好地完成工作中的任務。無論是學習新的編程語言和工具,還是准確地理解開源系統的原理和使用,亦或是定位各類軟件系統的運行時問題,還是開發新型的軟件系統或者擴展已有軟件系統的新功能,了解和熟悉計算機的工作原理確實給我帶來了巨大的幫助。曾經有互聯網公司的面試官這樣說,公司更看重的是一個人解決問題的能力。說白了,學習新的技術,使用各色各樣的軟件系統,根本上來說還是為了解決來自於業務或系統的問題,而對計算機更加熟悉的了解,可以幫助我們在解決問題的時候更加游刃有余,胸有成竹。
《自己動手構造編譯系統——編譯、匯編與鏈接》一書詳細闡述了一門編程語言從無到有的過程,從語言的功能特性設計,到詞法、文法、語義分析;從編譯器、匯編器的設計實現,到目標文件的鏈接生成可執行文件;甚至編譯優化器的實現、二進制指令、可執行文件格式以及語言運行時和標准庫的概念,都在書中做了認真細致地剖析。相信對本書的閱讀,將是一次不錯的獲得知識的體驗!
http://xxxxxx/Linuxjc/1149927.html TechArticle