- 深入實踐Kotlin元編程
- 霍丙乾
- 1007字
- 2023-10-19 18:03:05
1.2 元編程的基本概念
元編程這個詞看上去有些晦澀。元字的意思較多,包含開端、根源等諸多含義。本節將簡單介紹元編程的定義和分類。
1.2.1 元編程的定義
元編程(Meta Programming)就是以程序為數據的編程。這意味著元編程往往是以訪問和修改程序本身為目的的。其中,編寫元程序的語言被稱為元語言,被操作的語言則被稱為目標語言。
元編程與普通編程的區別在于處理的對象不同。大家可能已經有過很多元編程的實踐,例如Java/Kotlin的反射、APT(Annotation Processing Tool,注解處理器)、代碼規范檢查工具等。
元編程的概念不嚇人,但也不是沒有門檻。不管是什么類型的程序,程序設計者都需要在充分了解其業務需求背景和數據結構之后才能夠將程序逐步落地。元編程也是如此,我們需要對目標語言的元數據有一定的認識,才能夠設計出符合預期的元程序。
Kotlin是一門支持多平臺的編程語言,因而相關的元數據種類也較為豐富。本書將在第2章專門對Kotlin的元數據進行介紹,這將是我們后續實踐Kotlin元編程的重要基礎。
1.2.2 元編程的分類
Kotlin支持兩種不同階段的元編程,即運行時元編程和編譯時元編程。
運行時元編程通常是指運行時反射。我們可以使用反射在目標程序運行時修改其程序結構的信息,控制函數的調用,實現一定程度上的動態能力。在Kotlin中,我們既可以使用Java反射,也可以使用Kotlin反射,反射相關的內容將在第3章詳細介紹。
編譯時元編程涵蓋了程序從編寫到編譯的所有階段。按照目標程序的形式,又可以將編譯時元編程分為源代碼處理、編譯中間產物處理和編譯產物處理。
Kotlin元編程的分類如圖1-1所示。

圖1-1 Kotlin元編程的分類
絕大多數情況下我們編寫元程序是為了生成源代碼。本書第4章會詳細介紹源代碼生成相關的內容,第5章介紹的符號處理器通常也是以生成源代碼為目的的。
除了生成源代碼以外,我們還可以通過編寫元程序來實現對源代碼的分析。有關程序靜態分析的內容將在第6章展開討論。
Kotlin編譯器在編譯過程中會產生一些中間代碼,想要實現對中間代碼的處理就需要借助編譯器提供的擴展能力。我們將在第7章詳細介紹Kotlin編譯器插件(Kotlin Compiler Plugin),并在第9章對Jetpack Compose的編譯器插件實現進行詳細的剖析。
Kotlin對于符號處理的支持包括KAPT(Kotlin Annotation Processing Tool)和KSP(Kotlin Symbol Processing),二者均是基于Kotlin編譯器提供的擴展能力實現的。我們將在第5章詳細介紹Kotlin中與符號處理相關的內容,并在7.5節介紹符號處理器的實現原理。
編譯產物的處理與對應平臺的相關性很大,因此本書不打算對其展開重點討論。不過,我們還是會在第10章中以AtomicFU框架為例,介紹如何對Kotlin JVM和Kotlin JS的編譯產物進行處理。
- Reporting with Visual Studio and Crystal Reports
- Building Modern Web Applications Using Angular
- Network Automation Cookbook
- Python Game Programming By Example
- Bulma必知必會
- PLC編程及應用實戰
- 名師講壇:Spring實戰開發(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- HTML5+CSS3網頁設計
- 零基礎趣學C語言
- 新一代SDN:VMware NSX 網絡原理與實踐
- C語言程序設計實踐
- WildFly Cookbook
- Java Web開發基礎與案例教程
- Python數據預處理技術與實踐
- 大話程序員:從入門到優秀全攻略