CodeBlanks Logo Icon CodeBlanks

IR

Kotlin IR (Intermediate Representation) öğrenirsin.

IR nedir?

IR (Intermediate Representation), Kotlin derleyicisinin iç şunumudur; kaynak kodun ağaç biçiminde modellenmiş halidir. Tüm backend'ler (JVM, JS, Native) aynı IR'yi kullanır.

Bir IR dönüşümü, IrElementTransformerVoidWithContext gibi sınıflardan türer. Dönüştürücü, her düğümü ziyaret eder ve değiştirebilir. Örnek: override fun visitCall(expression: IrCall): IrExpression. Bu yapı, derleyici plugin'lerinin standart yoludur; Compose plugin'i IR ile çalışır. IR dönüşümleri karmaşık ama güçlüdür; derleme zamanında davranışı değiştirebilir.

IR ziyaretçi deseni

IR dönüştürücüleri ziyaretçi deseni (visitor pattern) ile çalışır. Her düğüm türü için ayrı bir visitX metodu çağrılır.

Örnek: visitCall fonksiyon çağrılarını, visitProperty özellikleri, visitClass sınıf tanımlarını işler. Dönüşüm sırasında orijinal düğümü değiştirmek yerine yeni bir düğüm döndürmek yaygındır; bu, yan etkileri azaltır. IR'nin tür güvenliği sayesinde yanlış dönüşümler derleme sırasında yakalanır. Bu dersin basit modelinde IrElement ve IrTransformer sınıflarıyla dönüşümün nasıl göründüğünü göstereceğiz.

Uygulama IrTransformer yaz

class IrElement(val name: String) tanımla. class IrTransformer içinde fun transform(el: IrElement): String metodu "ir:${'$'}{el.name}" döndürsün. main içinde bir IrElement("main") oluştur, IrTransformer().transform(...) çağrısının sonucunu yazdır.

Başlangıç kodu

Main.kt
// IrElement ve IrTransformer sınıflarını ekle

fun main() {
    // IrElement("main") oluştur ve transform edip yazdır
}

Örnek çözüm

Main.kt
class IrElement(val name: String)
class IrTransformer {
    fun transform(el: IrElement): String = "ir:${el.name}"
}
fun main() {
    val t = IrTransformer()
    println(t.transform(IrElement("main")))
}

Beklenen çıktı

ir:main

Soru ve cevaplar

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

1 transform metodunu tamamla

Soru
class IrTransformer {
    fun ____(el: IrElement): String = "ir:${'$'}{el.name}"
}
Cevap
class IrTransformer {
    fun transform(el: IrElement): String = "ir:${'$'}{el.name}"
}

Açıklama: transform(el) IR düğümünü dönüştürür.

2 IR parçalarını eşle

Kavram Anlamı
IrElement Düğüm temeli
IrTransformer Dönüştürücü
visitCall Çağrı ziyareti
IrCall Çağrı düğümü

3 IR dönüştürücüleri hangi deseni kullanır?

  • Singleton
  • Factory
  • Observer
  • Ziyaretçi (visitor) Doğru cevap

Açıklama: IR dönüştürücüleri ziyaretçi deseniyle her düğüm türünü ayrı işler.

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