16 puan yazan xguru 2024-12-23 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Meta, yıllara yayılan bir proje kapsamında Android kod tabanını Java'dan Kotlin'e dönüştürüyor
  • Şu anda dünyanın en büyük Android kod tabanlarından birini yönetiyor ve bunun yarısından fazlasını başarıyla Kotlin'e çevirmiş durumda
    • Meta, 2020'den beri Kotlin-first geliştirme stratejisini benimsiyor
  • Tüm kodu dönüştürme nedenleri:
    • Kotlin'in "üretkenlik artışı" ve "null güvenliği" avantajlarından azami ölçüde yararlanmak için mevcut on milyon satırlık Java kodunu da dönüştürmeye karar verdi
    • Null güvenliğini güçlendirmek ve karma kod tabanı sorunlarını çözmek
      • Karma derleme (Java ve Kotlin'in aynı anda derlenmesi) derleme hızını en çok yavaşlatıyor
      • Geriye kalan Java kodu null güvenliği sorunlarına yol açıyor: null-safe olmayan Java kodu, bağımlılık grafiğinde NullPointerException (NPE) için potansiyel bir kaynak oluyor
      • Kotlin, çalışma zamanı doğrulamasıyla null güvenliğini garanti ediyor

Otomasyon süreci

  • Başlangıçta Intellij IDE'nin J2K dönüştürme aracını tekrar tekrar çalıştırdılar
    • Meta'nın büyük ölçekli kod tabanında bu, 100.000'den fazla tıklama gerektiriyor ve her çalıştırma birkaç dakika sürüyordu
    • Sonuç olarak bu yöntem, ölçeklenebilirlik eksikliği nedeniyle verimsizdi
  • Otomasyon aracı: Kotlinator geliştirildi
  • 6 aşamalı dönüşüm süreci
    1. Deep Build: Dönüştürülecek kodu derleyerek IDE'nin tüm sembolleri çözebilmesini sağlama. Üçüncü taraf bağımlılıklar ve üretilmiş kodlar dahil
    2. Preprocessing: Meta'nın özel aracı Editus tabanlı. Null güvenliği ve bağımlılık işleme, J2K workaround'ları gibi yaklaşık 50 adım içeriyor
    3. Headless J2K: J2K'nin sunucu ortamında çalışabilmesi için değiştirilmesi
    4. Postprocessing: Android'e özgü değişiklikler, null güvenliği, Kotlin stili uygulamaları gibi yaklaşık 150 adım
    5. Linters: Otomatik düzeltmelerle dönüşüm kalitesini sürekli iyileştirme
    6. Build Error-based Fixes: Derleme hatalarını analiz ederek ek düzeltmeler uygulama

J2K'yi headless hale getirmek

  • J2K'yi uzaktan çalıştırılabilir hale getirmek için değiştirildi:
    • J2K, Intellij IDE ile sıkı biçimde bağlı olduğundan bağımsız çalıştırmak zordu
    • Başta Intellij test ortamı kullanılarak çalıştırılması düşünüldü ancak JetBrains'in J2K uzmanı Ilya Kirillov ile görüşüldükten sonra headless inspection yöntemine geçildi
    • Bir Intellij eklentisi oluşturularak ApplicationStarter sınıfı genişletildi ve J2K'nin JavaToKotlinConverter sınıfı çağrılarak uygulandı
  • Headless yaklaşımın avantajları
    • Yerel IDE sorunlarının çözülmesi: geliştiricilerin IDE'de düğmelere bizzat tıklaması gerekmiyor
    • Birden fazla dosyanın aynı anda dönüştürülmesi: büyük ölçekte dosya işleme mümkün hale geliyor
    • Harcanan sürenin azalması: dönüşüm süresi yaklaşık 30 dakikaya çıksa da geliştiricilerin harcadığı zaman büyük ölçüde azalıyor
    • Derleme ve hata düzeltme desteği: zaman alıcı ama faydalı iş adımları (derleme sonrası düzeltmeler) uzaktan otomatik çalıştırılabiliyor
  • Otomasyon ve kod inceleme
    • Meta'nın iç sistemleri kullanılarak günlük toplu işler oluşturuluyor:
    • Özel ölçütlere göre toplu diff'ler üretiliyor (Meta'nın pull request sürümü)
    • Otomatik olarak reviewer atanıyor, test ve doğrulama yapıldıktan sonra son onaylı diff dağıtıma alınıyor
  • Web arayüzü sağlandı: geliştiriciler belirli dosya veya modüllerin dönüşümünü uzaktan tetikleyebiliyor
  • Dönüşüm sırasının belirlenmesi
    • Belirli bir sıra zorunlu kılınmıyor:
      • Aktif geliştirme yapılan dosyalar önce işleniyor
      • Kotlinator, bağımlılık grafiğini otomatik işleyerek dış dosyalardaki uyumluluk sorunlarını çözüyor
      • Örneğin foo.getName() ifadesini otomatik olarak foo.name olarak güncelliyor

Diğerleri

  • Özel preprocessing (Java->Java) ve postprocessing (Kotlin->Kotlin) adımları eklendi
  • Meta'nın iç aracı Editus ve JetBrains PSI kütüphanesi kullanılarak dönüşüm kalitesi artırıldı
  • Nullsafe ve NullAway

Kotlin dönüşümünün bugünü ve geleceği

  • Meta'nın Android Java kodunun yarısından fazlası Kotlin'e dönüştürüldü (veya bazı kodlar silindi)
  • Ancak, kolay olan yarı bitti:
    • Kalan iş daha karmaşık ve daha büyük ölçekli
    • Tam otomatik dönüştürülebilir dönüşümler için özel adımlar eklemek veya J2K'yi iyileştirmeye katkı sağlamak gerekiyor
    • Yarı otomatik dönüşüm için ise Kotlinator'ı geliştirerek daha pürüzsüz ve güvenli dağıtım hedefleniyor
  • Diğer şirketlerin de benzer Android kod dönüşümü sorunları yaşadığı düşünülüyor
  • Meta, dönüşüm araçlarını iyileştirip optimize ederken elde ettiği çözümleri paylaştı
  • İş birliği çağrısı:
    • Kotlinlang Slack'teki #j2k kanalında diğer geliştiricilerle tartışma
    • Birbirlerinin örneklerini ve çözümlerini paylaşarak daha iyi bir dönüşüm deneyimi oluşturmanın mümkün olacağı belirtiliyor

Henüz yorum yok.

Henüz yorum yok.