Google發布KSP2(Kotlin Symbol Processing)預覽的消息,KSP2支援代號為K2的新Kotlin編譯器,同時還會新加入一個獨立原始碼生成器,相比目前的Kotlin編譯器擴充套件,這個獨立的原始碼生成器將提供更多的功能以及靈活性。

KSP是一個用於Kotlin後設程式開發(Meta-Programming)的高階API。後設程式開發是一種程式開發技術,供開發者編寫能夠操作或是改變其他程式碼的程式碼,也就是說,在後設程式開發中,程式碼不僅僅是完成特定功能的指令,還能夠對程式碼進行分析、修改、生成和轉換。

由於KSP提供後設程式開發的功能,因此許多Kotlin開發工具都是建立在KSP之上,讓Kotlin程式碼在編譯的時候生成。例如Google的Jetpack Room就是KSP的衍伸工具,能夠根據開發者提供的介面,產生存取資料庫的程式碼。

而雖然KSP已經成為Kotlin後設程式開發的核心基礎,但是Google提到,KSP與當前的一些實作還存在一些差距,因此希望透過新的KSP2架構來解決。KSP2支援使用目前正在開發,預計在Kotlin 2.0正式發布時成為預設的K2編譯器。

過去KSP1可以理解為Kotlin 1.x編譯器的擴充套件版本,使用KSP1需要執行編譯器,並指定KSP及其擴充套件選項。在Gradle中,KSP的任務是客製編譯任務,在預設情況中,這些任務實際會分派給KotlinCompileDaemon執行,但因為KotlinCompileDaemon在其自己的程序中運作,位於Gradle的外部,因此讓KSP除錯和測試變得困難。

而在KSP2被實作成帶有主要進入點的函式庫,這代表建置系統和工具,不需要配置編譯器,可以透過這個進入點呼叫KSP2,這種方法使得程式化呼叫KS2變得很簡單,特別是在除錯和測試上特別有用。開發者將可以在KSP Processor元件設置中斷點,大幅簡化除錯過程。

Google同時也調整了部分KSP2 API的行為,讓開發人員的工作效率更好,也提供更好的可除錯性和錯誤恢復能力,例如在解析Map<String, NonExistentType>時,在KSP1的時候僅會回傳錯誤型別,到了KSP2則會回傳Map<String, ErrorType>。

KSP2在多平臺處理方案(Processing Scheme)也將會更新,處理共用程式碼將會更有效率。在之前的版本,當開發者有一個多平臺Kotlin專案,共用的程式碼會依據個別目標平臺,被重複處理和編譯多次,這樣雖然可以確保共用程式碼都能正確被處理,但卻是效率不彰的方法。儘管KSP2多平臺處理方案的細節尚未完全公開,但是預期將會以更有效的方式處理共用程式碼,以減少重複工作並提高編譯效率。

熱門新聞

Advertisement