1. 怎麼理解元編程
1.一種語言本來做不到的事情,通過你編程來修改它,使得它可以做到了,這就是元編程。
2.就是用代碼生成(操縱)代碼。
3.常見的開發語言均能做到元編程,Lisp這貨就不用多說了,C的Marco,C++的Template,Java的Annotation,C#的Attribute、Reflection、CodeDom和IL Emitter,各種腳本語言(如js、python)的eval,甚至連Unix/Linux的shell腳本也能。
4.元編程常見的應用場景很多,擴展(重構)語法、開發DSL、生成代碼、根據特定場景自動選擇代碼優化、解決一些正交的架構設計問題、AOP等等。
5.所以元編程存在的目的,就是多提供了一個抽象層次。
6.至於元編程有什麼優缺點,爭議還是比較大的。比如以重構語法的應用為例,很多元編程的反對者就認為這樣會導致代碼的可讀性、可維護性降低,分化社區,影響交流,因為每個開發人員都能搞一個自己的方言。
總的來說,元編程玩得轉的話會讓你日子好過一些,玩不轉會讓你日子不好過一些。
2. 元編程的元編程的概念
反射是促進元編程的一種很有價值的語言特性。把編程語言自身作為頭等對象(如Lisp或Rebol)也很有用。支持泛型編程的語言也使用元編程能力。
元編程通常有兩種方式起作用。一種方式是通過應用程序介面(API)來暴露運行時引擎的內部信息。另一種方法是動態執行包含編程命令的字元串。因此,「程序能編寫程序」。雖然兩種方法都能用,但大多數方法主要靠其中一種。