Kotlin 1.4 ve Yenilikler
KotlinConf 2019 etkinliğinde, Kotlin 1.4 versiyonunun 2020 yılı 1.çeyreğinde yayınlanacağı duyurulmuştu. Bu incelemeyle Kotlin 1.4'de gelecek yeni özellikleri biraz daha detaylı inceleyeceğiz.
Kotlin 1.4 ile en çok performans konuları üzerine odaklanıldı. Yeni versiyon ile temel değişiklikler/özellikler/fonksiyonlar yerine yazılımcının kodlama deneyimini arttıracak çalışmalar yapıldı.
Ayrıca Kotlin'i destekleyen IDE'lerin performansında da ilerleme katedildi. Kod tamamlama hızı önceki sürümlere göre önemli ölçüde arttı:
Gradle komut dosyaları daha hızlı hale getirildi. Kotlin 1.3.60'daki Gradle Import, Kotlin 1.3.10'dakinden yaklaşık 2.5 kat daha hızlı hale getirildi ve yaklaşık %75 daha az bellek harcıyor.
Ayrıca build.gradle.kts yüklemesinde sıfır CPU kullanımı gerekiyor. Kotlin/Native'i dev modunda derlemek, code caching özelliği ile normalden 2 kat daha hızlı çalışıyor.
Yazılımcılar için en büyük sorun olan build time'ı iyileştirmek amacıyla toolchain'de de bazı değişikler yapılmış durumda. Derleme süresini daha hızlı hale getirmek için yapılan artırımlı iyileştirmeler yazılımcıların daha fazla kod yazmasına neden olur. Bu nedenle build time'da yazılımcıyı olumlu etkileyecek iyileştirmeler elde edilemez. Gerçekten hızlanmak için compiler'ı tekrar elden geçirmek ve implement etmek gerekir.
Yeni compiler'ın geliştirilmesinin amacı hızı arttırmak, Kotlin'in desteklediği tüm platformları birleştirmek ve derleyici extension'ları için ortak bir API sağlamaktır. Bu amaçla compiler geçişi uzun soluklu gerçekleştirilecek ve her yeni versiyonda compiler çalışmalarının bir kısmı yayınlanacaktır. Bu kapsamda 1.4 versiyonu ile compiler çalışmasının bir kısmı yayınlanıyor olacak. Bu arada type inference'in yeni algoritması da yeni compiler'in bir parçasıdır.
Yeni Front-End ile Hızlanma
Yeni derleyiciden beklenen hızlanmanın büyük bir kısmı yeni front-end implementation ile gerçekleşecektir. Derleme, kaynak dosyalarını alıp, arka planda adım adım executable koda dönüştüren bir pipeline'dır. Bu pipeline'daki ilk büyük adım, derleyicinin front-end'inde gerçekleşir. Bu kısım kodu ayrıştırır, adları çözer, type checking yapar. Derleyicinin bu bölümü hatalar vurguladığında, tanımlara gidildiğinde veya projedeki sembol kullanımları aradığında IDE içinde de çalışır. Mevcutta kotlinc'nin en çok zaman harcadığı bölüm bu bölümdür. Yapılan karşılaştırmalarda yeni front-end'in mevcut yapıya göre 4.5 kat daha hızlı çalışacağını gösteriyor.
Birleşik Back-End'ler ve Extensibility
Front-end, kodu analiz ettikten sonra, back-end'ler executable'ları oluşturur. 3 adet back-end mevcuttur.
Kotlin/JVM ve Kotlin/JS farklı tarihlerde bağımsız olarak yazılmıştır. Kotlin/Native yazılmaya başlandığında, Kotlin kodu için sanal makinelerde bytecode'a benzer bir işleve hizmet eden dahili bir representation (IR) etrafında inşa edilen yeni bir altyapıya dayandırıldı. Şimdi yapılan ise Kotlin/JVM ve Kotlin/JS back-end'lerinin aynı representation (IR)'ye taşınmasıdır. Sonuç olarak tüm back-end mantığı paylaşılmış olacak. Bu sayede çoğu özellik, optimizasyon ve bugfix bütün target'lar için tek seferde tek pipeline ile yapılabilecek.
Bahsettiğimiz yeni back-end'ler 1.4 versiyonu ile default açık şekilde yayınlanmayacak ancak isteyen yazılımcılar bu back-end'leri aktifleştirip optimizasyon yapabilecekler.
Ortak back-end altyapısı, çok platformlu derleyici extension'larının da kapısını açacak. Ancak 1.4'de bu tür extension'lar herkese açık bir API sağlamayacak. (API daha sonra stabilize edilecek). Ancak derleyici extension'larını mevcutta oluşturan JetPack Compose ile yakın şekilde çalışmalara devam ediliyor.
KLib ile Tanışın: Kotlin Library Format
Kotlin'de multi platform bir kütüphane oluşturmak ve onu client'lara güvenebilecekleri şekilde göndermek için, her platformda aynı çalışacak bir dağıtım formatına ihtiyaç vardı. Bu amaçla çoklu platform kütüphane formatı KLib oluşturuldu. KLib dosyası serileştirilmiş representation (IR) içermektedir. Kodunuz bağımlılık olarak eklenebilir, derleyici back-end'i kodu alıp, verilen platform için executable kod oluşturur. Burada bytecode ile benzerlik mevcuttur: KLib'ler JVM bytecode gibi analiz edilebilir ve dönüştürülebilirler.
Serileştirilmiş IR'ye yapılan herhangi bir dönüşüm KLib'in kullanıldığı herhangi bir platformu etkileyecektir. Mevcutta Kotlin/Native, Kotlin yerel kütüphanelerini dağıtmak için zaten bir süredir KLibs formatını kullanıyor. Şimdi ise format diğer back-end'leri ve multi platform kütüphanelerini desteklemek için genişletiliyor. Format 1.4'te deneysel olacak ve diğer yeni sürümler için kararlı bir ABI sağlanmaya çalışılacak.
Diğer Multiplatform Yenilikleri
Android Studio'da iOS Kodunu Çalıştırmak :)
Android Studio için, iOS cihazlarında ve simülatörlerinde Kotlin kodunu çalıştırabilecek, test ve debug edebilecek bir eklenti üzerinde çalışılıyor. Eklenti IntelliJ'in tescilli kodunu kullacağı için kapalı kaynak olacak. Objective-C veya Swift için dil desteği getirmeyecek ve AppStore'a dağıtım gibi bazı işlemlerde Xcode'un çalıştırılması gerekecek, ancak Kotlin ile Android Studio'da iOS uygulaması geliştirilebilecek. 2020 yılında bu eklenti için bir önizleme açılacaktır.
Kotlin/Native Runtime İyileştirmeleri
Linux, Windows, macOS ve iOS dışında, Kotlin/Native artık watchOS ve tvOS üzerinde çalışıyor, yani hemen hemen her cihaz Kotlin'i çalıştırabilir durumda. Ayrıca "iOS Kotlin programları"nın daha hızlı çalışmasını sağlamak için Kotlin/Native'in runtime performansı üzerinde çalışılıyor.
Kotlin core kütüphaneleri tüm platformlarda çalışıyor. Bu, tüm temel türleri ve koleksiyonları işleyen kotlin-stdlib, kotlinx.coroutines, kotlinx.serialization ve kotlinx.io'yu da içeriyor. Multiplatform dünyasında date desteği önemli bir konu. Mevcutta duration'lar stdlib içine eklenmiş durumda. DateTime desteği de devam ediyor.
Kotlin kütüphanesine diğer önemli eklenti ise Reactive Streams'in coroutine tabanlı uygulaması Flow'dur. Flow, veri akışlarını işlemede Kotlin'in gücünü kullanmaktadır. Flow mevcut Reactive Streams entegrasyonlarından 2 kat daha hızlıdır.
Yeni kitaplık yazma modu (library authoring mode), kodunuzun kararlı API'lar için en iyi şekilde şekillenmesine yardımcı olacaktır. Ayrıca, tüm platformlar için doküman oluşturmayı desteklemek üzere Dokka 1.0 yayınlanacaktır.
Kodları platformlar arasında paylaşmak mobil cihazlarda olduğu kadar, web client'larda da önemlidir. Kotlin/JS tooling ile kotlin kodunu değiştirip sonucu tarayıcı'da hızlıca görebilecek şekilde çalışmalar yapılmaktadır.
Ayrıca geliştirilen JS interop ile Kotlin projesine NPM bağımlılığı eklenebilecek ve .d.ts türü tanımlamalar Kotlin toolchain tarafından otomatik olarak alınabilecek. Yeni IR tabanlı back-end ayrıca binary boyutlarından önemli iyileştirmeler sağlayacak. Derlenmiş JS dosyaları mevcut boyutlarının yarısı olabilecek.
Yeni Dil Özellikleri
Kotlin 1.4 ile bazı yeni dil özellikleri de mevcut olacak.
Yeni dil özelliklerinin detayları için: https://blog.jetbrains.com/kotlin/2019/12/what-to-expect-in-kotlin-1-4-and-beyond/
#kotlin #android #klib