CodeBlanks Logo Icon CodeBlanks

Plugin vs KSP

Compiler plugin ve KSP farkını öğrenirsin.

Plugin ve KSP farkı

Compiler plugin ile KSP her ikisi de derleme zamanında çalışır ama güç ve karmaşıklıkları farklıdır. KSP yalnızca sembolleri okur; plugin tüm AST'yi dönüştürebilir.

KSP daha basit ve kararlıdır; kod üretmek için idealdir (Room, Moshi). Plugin daha güçlüdür ama daha karmaşıktır; mevcut kodu değiştirmek için gereklidir (all-open, no-arg, compose). Plugin, KSP'nin sunmadığı sınıf open yapma, sentetik kurucu ekleme ve IR dönüşümü sağlar. Yeni bir araç yaparken önce KSP yeterli mi diye sor; yetmiyorsa plugin düşün.

Ne zaman hangisi?

Eğer yalnızca yeni kod üreteceksen KSP yeterlidir. Eğer mevcut sınıfları değiştirmen gerekiyorsa (open yapmak, kurucu eklemek, IR'yi dönüştürmek) plugin gerekir.

Örnek: bir @Entity annotation'ından DAO üretmek için KSP yeterlidir. Ama Spring'in @Configuration'ını CGLIB proxy'si için open yapmak gerekiyorsa all-open plugin'i kullanılır. Compose gibi UI framework'leri @Composable fonksiyonları derleme sırasında dönüştürmek için plugin kullanır. Bu fark, mimari kararlarını etkiler.

Uygulama Mod karşılaştırması yaz

data class Mode(val name: String, val level: String) tanımla. main içinde listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol")) oluştur. Her biri için println("${'$'}{it.name}: ${'$'}{it.level}") yaz.

Başlangıç kodu

Main.kt
// Mode veri sınıfını ekle

fun main() {
    // iki mod oluştur ve yazdır
}

Örnek çözüm

Main.kt
data class Mode(val name: String, val level: String)
fun main() {
    val modes = listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol"))
    modes.forEach { println("${it.name}: ${it.level}") }
}

Beklenen çıktı

Plugin: AST
KSP: Symbol

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Plugin ve KSP eşle

Kavram Anlamı
KSP Sembol okuma
Plugin AST dönüşümü
all-open Sınıfı open yapar
Room KSP kullanan kütüphane

2 Bir sınıfı open yapmak için hangisi gerekir?

  • Yalnızca KSP
  • Compiler plugin (all-open) Doğru cevap
  • Runtime reflection
  • Yalnızca IDE ayarı

Açıklama: Sınıfı open yapmak mevcut kodu değiştirir; bu ancak plugin ile yapılır.

3 Mod listesini tamamla

Soru
val modes = listOf(Mode("Plugin", "AST"), Mode("____", "Symbol"))
Cevap
val modes = listOf(Mode("Plugin", "AST"), Mode("KSP", "Symbol"))

Açıklama: KSP sembol düzeyinde çalışır.

Uzman bölümündeki tüm dersler