Gömülü Yazılımdan Bulut Bilişime: Java 8 (26.10.2016)
Java SE 8 ve Java ME 8'i içerisinde barındıran Java 8, Java'nın şu ana kadar çıkardığı sürümler içerisinde en belirleyicilerden biri olarak kendini gösteriyor. Lambda ifadeleri ve yeni Stream API'si hem platformun ifade gücünü arttırıyor hem de yazılımcıların çift çekirdekli modern işlemcilerin avantajlarını kullanabilmelerine imkân sağlıyor. Java ME (Micro Edition) 8 en güncel JVM'i (Java Virtual Machine), programlama dilini ve kütüphaneleri barındıracak şekilde güncellendi ve küçük gömülü (embedded) cihazlara odaklandı. Java 8 ile birlikte yazılımcılar aynı platformu kullanarak en küçük cihazlardan (Internet of Things) en büyük kurumsal bulut (Cloud) servislere kadar geniş bir alana ulaşabilecekler.
Java 8 ile birlikte 8 temel özellik geliyor:
1- Lambda İfadeleri (Closures): Lambda ifadeleri; davranışları veri şeklinde göstermeye yarayan basit ifadelerdir. Listeleri (Collections) işlemek çok daha kolay ve etkili hale gelecektir. Örneğin sekizden daha az şarkı barındıran albümlere sahip sanatçıları sorgulamak istiyoruz. Lambda ifadelerinden önce bunu standart ‘for’ döngüsüyle geliştirebiliyorken, Java 8'den itibaren tek bir satırda geliştirebileceğiz:
Set<Artist> artists =
albums.stream().filter(album -> album.getTracks().size() < 8).
map(album->album.getArtist()).collect(toSet());
2- Nashorn ve Javascript: Nashorn, Java 8 ile birlikte gelen ve JVM'in bir parçası olarak çalışan modern bir Javascript kütüphanesidir. JDK'nın içerisindeki javax.script paketinde bulunur. Bu sayede geliştiriciler Java kodlarının içerisine Javascript bileşenleri ekleyebileceklerdir. Aynı zamanda içerisinde Nashorn'u script dili olarak komut satırından çalıştırabilmek için jjs komutu da bulunmaktadır.
3- Compact Profiller: Bu profiller Java Standard Edition ile Java Mobile Edition'ı birbirine yakınlaştıran üç adet temel Java API gruplarıdır. Yıllardır gömülü yazılım geliştiriciler küçük cihazlara küçük Java binary'ler yükleyebilmek istiyorlardı. Compact profiller sayesinde tüm platformu yüklemeden sadece ilgili binary'yi küçük cihazlara yükleyebilme olanağı sağlandı. Bu sayede kısıtlı kaynağı olan cihazlara da küçük JVM'ler yüklenebilecek.
4- Date ve Time Kütüphaneleri: Yeni java.time kütüphaneleri sayesinde geliştirilmesi ve okunması daha kolay uluslararası zaman standartları kullanılabilir. Bu paketteki her bir Java sınıfı ilgili işe özgüdür ve aynı zamanda - aynı anda erişim (Concurrency) problemlerini çözmek için değeri değiştirilemeyen (Immutable) sınıflar olacaklardır.
5- Java FX 8: Java FX'in 8. sürümü Lambda ifadelerini destekleyen bileşenleri barındırıyor. Bu sayede kullanıcı davranışlarını yakalama (Event Handling) gibi kodlar çok daha kısa hale geliyor. Aynı zamanda dışarıdan (Third Party) bileşen kullanımı kolaylaşıyor. Performans tarafında da birçok geliştirme yapılması sayesinde Raspberry Pi gibi kaynak kısıtı olan cihazlarda gömülü JavaFX kullanılabiliyor.
6- Topluluğun İyileştirilmesi: Java 8 ile birlikte Java geliştiren topluluğun yapısında ve süreçlerde iyileştirme yapıldı. JUG (Java User Groups) toplulukları Java topluluğunun öğrenim ve katılım konularında birleştirici yerel merkezler oldu. Dünyanın her yerindeki bu Java grupları Java'nın geliştirilmesinde ve öneriler toplamada yeni bir anlayış getirdi. ‘Adopt a JSR’ programı sayesinde yeni katılımcılar ve organizasyonlar Java'nın gelişmesinde katkıda bulundular. 26'dan fazla JUG, Java 8'in gelişiminde pay sahibi oldu.
7- Java ME 8 (Java Micro Edition): Java ME 8 ile birlikte Java SE ve Java ME birbirine yaklaşmış oldu. Bu sayede aynı yetkinliğe sahip yazılımcılar hem büyük ölçekli kurumsal platformlarda hem de küçük gömülü sistemlerde uygulama geliştirebilecekler.
8- Java SE 8 (Java Standart Edition) ve JVM: Java SE 8 ile birlikte çöp toplayıcı (Garbage Collection / GC) altyapısı iyileştirildi. Yeni geliştirmelerle birlikte kullanıcılar bir türünden diğerine kolaylıkla atlayabilecek. Aynı zamanda Java SE 8 ile birlikte yazılımcıların PermGEN alanını iyileştirmelerine (Tuning) ihtiyaç kalmadı. PermGEN bölümündeki sınıfların meta verileri kuyruğa (Heap) taşındı. Bu sayede yazılımcıların bu alanın boyutunun ne olması gerektiği konusunda fikir sahibi olmalarına ihtiyaç kalmadı. Son olarak Java ME 8 güncellenerek Java SE 8'deki kütüphanelerin bir kısmını kullanabilmesi sağlandı.
Sonuç olarak Java 8 yazılımcılara aynı yetkinlikleri kullanarak küçük cihazlara gömülü yazılımlardan bulut bilişim (Cloud) üzerinde çalışan büyük ölçekli kurumsal uygulamalara kadar geniş bir oyun alanı sunuyor. Lambda ifadeleriyle de kodun satır sayısını azaltıp fonksiyonel programlama dillerinin avantajlarını kullanarak yazılımcıların verimliliğini arttırmayı hedefliyor.