把代碼當作一種文本,解析這個文本,生成數據結構,而後從新計算遍歷,統計,生成新的代碼,就是代碼生成。程序員
隨着業務的擴展,需求的增長,代碼量的擴張是不可避免的。爲了能不斷知足新的需求,就要不斷用新的抽象下降項目的複雜程度,以便能讓普通程序員進行維護。算法
總的來講,新的功能是舊的功能的疊加和演化:若是舊功能是函數,那麼新的功能就是利用這些函數,生成新的函數。因此有人說:項目的擴展,就是在寫一個 Lisp 語言的解釋器。數據結構
只有將代碼當成文本處理,才能讓用代碼描述的項目成爲能夠任意擴展的東西,不然,利用代碼語言自己的各類模式,很難能大幅度下降項目的複雜程度。函數
因此,不斷用新的語言,描述項目的需求,是保持項目擴展的最好途徑。設計
那麼,普通項目如何成爲一個語言解釋器呢?答案是不斷設計代碼生成器,用更抽象的描述,保持項目的可維護性。擴展
代碼做爲軟件企業的資產,有特定的運行環境,特定的應用場景,當有新的需求,新的環境,代碼的可用性會大打折扣,由於運行的環境可能不一樣,版本可能會發生變化,這個問題怎麼解決呢?軟件
就是把代碼標準化,讓代碼儘量和語言無關,儘量和環境無關,只是單純的算法,這樣在不一樣的語言環境中就能夠增長可重用性。遍歷