程式員都應學習代碼編譯器知識

來源:互聯網
上載者:User

  所有優秀的電腦科學學院都提供了編譯器課程,但是相對比較少的學校把它作為本科課程的必修部分。這篇文章回答了這個問題:為什麼需要學習編譯器知識?即使你從沒打算過編寫編譯器。我寫這篇文章的其中一個原因是,儘管我在讀本科時很喜歡編譯器課程,但是我幾乎看不到它的實際作用。大多數資料看起來要麼簡單易懂,要麼很深奧(事實上,我找到的大部分編譯器資料都是很枯燥的。)無論怎樣,我用了幾年時間總結了為什麼這類課程會如此有用的實際原因。原因如下。分析器和解析器無處不在嚴謹的php程式員不得不去瞭解分析器和解析器,因為我們不會總是唯寫一些小程式。每次你寫一個可擴充的程式或處理一種新類型的輸入檔案,你都需要瞭解它們(分析器和解析器)。格林斯潘第十定律:“任何C或Fortran程式複雜到一定程度之後,都會包含一個臨時的、只有一半功能的、不完全符合規格的、充滿bug的、運行速度很慢的Common Lisp實現。”我們花費如此多的時間在這些事情上,我們可以使用一次性的小技巧來做這些事情的每一個,或者我們利用60年的理論和實際知識去解決問題,並把它做對。重要的是:你應該什麼時候借用已存在的代碼或者使用已存在的工具?理論知識在什麼時候可以提供協助?哪些語言設計原則可以運用在我們日常使用的小語言?你能更好地編寫正確的代碼編譯器應該把輸入的語言正確地翻譯成合法的程式。為了達到這個目標,編譯器開發人員必須瞭解整個輸入語言,包括一些普通程式員沒見過的罕見問題。這個理解過程是通往程式語言本質的重要一步,它和我們平時寫代碼時所看到的不一樣。舉個例子,我在學習了順序點(sequence points),未定義行為(undefined behaviors),和常用的算術轉換的細節後,完全改變了我對C語言的理解。C編譯器編寫者已經掌握這些概念了,但大多數初級和中級程式員都不知道這些概念。毫不誇張地說,一旦你知道語言的本質,你會以不同地方式和更準確地思考這個語言。這適用於任何的語言,特別是像C和C++這些語義不清晰的語言。 你可以編寫更快的代碼通過瞭解編譯器,你可以很清晰地知道哪些最佳化是編譯器可以最佳化的,和哪些是編譯器不能進行最佳化的,無論他們看起來是多麼的合理和簡單。你將會學到哪類代碼通常會建造最佳代碼塊,為什麼會這樣和這些代碼做了什麼。你會知道為什麼一些代碼可以擁有更好的效能,比如使用一半寄存器組緩衝濾波係數一半寄存器組緩衝樣本的FIR濾波器,它和使用普通最佳化器實現的不一樣。你和你喜歡的編譯器是一個能建立快速代碼的團隊,你可以使用它高效地工作,或者使用提前最佳化等無意義的技巧來修改它。其次,編譯器後端是與目標架構密切關聯的,當然,現代的架構都盡量提供組譯工具員友好的平台,而且離著不遠了。通過理解編譯器後端和它為什麼是這樣產生代碼的,你會對電腦架構的操作有更好的理解。總結編譯器(理論上)有三部分:1.語言相關的前端(分析,類型檢測)2.與語言和目標無關中端(最佳化))3.目標相關的後端(產生機器代碼)在這篇文章裡,我已經試圖說服你們,理解編譯器的每一部分都是有價值的–即使你將來不會實現或者修改它們。免費領取LAMP兄弟連原創PHP視頻教程光碟片/《細說PHP》精要版,詳情諮詢官網客服:http://www.lampbrother.net
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.