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