OpenJDK 24 için şu anda 24 tane var (20 Kasım 2024 itibariyle)! (harflerle: yirmi dört) PEC bekleniyor. Bu yalnızca daha sonraki sürüm numarasıyla ölçeklenmez. Bu aynı zamanda geliştirmenin 2018'de altı aylık sürüm döngülerine geçmesinden bu yana yeni bir rekor. Ve sayı hala artabilir. Bir sonraki sürüm için Rampdown'ın Freeze özelliğine sahip Birinci Aşaması yalnızca 5 Aralık'ta başlayacak. Ve bu sefer çok fazla JEP (JDK Geliştirme Teklifi) olduğundan, geliştiricinin bakış açısından şu anda planlanan en ilginç noktalara ilk kez bakacağız. Daha fazla ayrıntıyı ilgili PEC'lerde bulabilirsiniz.
Duyuru
Embarc Software Consulting GmbH'de yazılım mimarı, danışman ve eğitmen olarak Falk Sippach her zaman katılımcılarında, müşterilerinde ve meslektaşlarında ateşlenecek tutku kıvılcımını arıyor. 15 yılı aşkın bir süredir ağırlıklı olarak Java ortamında çevik yazılım geliştirme projelerine destek vermektedir. Topluluğun aktif bir parçası olarak (JUG Darmstadt'ın ortak organizatörü), aynı zamanda makalelerde, blog gönderilerinde, ayrıca konferanslardaki derslerde veya kullanıcı grubu toplantılarında bilgilerini paylaşmayı sever ve çeşitli etkinlik uzmanlarının organizasyonunu destekler. Falk @sippsack'ta tweet atıyor.
Geriye kalan özelliklere daha sonraki bir yazıda bakacağız. Belki daha fazlası eklenecektir. Dolayısıyla önümüzdeki birkaç hafta içinde neler olacağını görmekten heyecan duyabiliriz.
JEP 485 – Akış Toplayıcılar
İki önizlemenin ardından artık sonuçlandırma işlemine geçiyoruz. Java 8'de sunulan Stream API artık kendi ara işlemlerinizi eklemeyi destekliyor. Bu, akışlardaki verilerin artık daha önce yerleşik birkaç ara işlemden daha iyi ve daha optimize edilmiş bir şekilde dönüştürülebileceği anlamına geliyor. Bu, akış boru hatlarının artık daha esnek ve anlamlı bir şekilde uygulanabileceği anlamına geliyor. OpenJDK ayrıca bazı yeni işlemler de sağlar: fold, mapConcurrent, scan, windowFixed VE windowSliding. Diğerleri gelecekte nispeten kolaylıkla takip edebilir.
JEP 484 – Sınıf Dosyası API'si
İki ön izlemeden sonra, Java Sanal Makinesi spesifikasyonuna dayanan Java bayt kodunu (sınıf dosyaları) ayrıştırmaya, oluşturmaya ve dönüştürmeye yönelik yeni standart artık tamamlandı. Gelecekte tüm JDK bileşenleri bu standart API'ye taşınabilir. Sonunda JDK geliştiricileri dahili kopyayı ve dolayısıyla üçüncü taraf ASM kitaplığına bağımlılığı kaldırabilir.
JEP 488 – Desenlerdeki ilkel türler, örnek oluşturma ve anahtarlar (ikinci önizleme)
Bu ikinci önizleme, kalıp eşleştirmeyi benzer ilkel veri türlerine genişletmekle ilgilidir int, byte VE double tüm desen bağlamlarında kullanılabilir, yani instanceof ve içeride switch. Bu, geliştiricilerin daha az sınırlamaya ve özel duruma sahip olduğu ve aynı zamanda ilkel ve referans veri türlerini tür şablonları bağlamında veya kayıt şablonlarının bileşenleri olarak birbirinin yerine kullanabileceği anlamına gelir. İlk önizlemeden bu yana herhangi bir değişiklik olmadı ancak JDK geliştiricileri daha fazla geri bildirim toplamak istiyor.
JEP 499 – Yapılandırılmış Yarışma (Dördüncü Ön İzleme)
Birkaç paralel alt görevi işlerken, yapılandırılmış eşzamanlılık, uygulamanın özellikle okunabilir ve bakımı kolay bir şekilde yapılmasına olanak tanır. Alternatif olarak geliştiriciler bu amaç için zaten paralel akışları, ExecutorService'i veya reaktif programlamayı kullanabiliyor. Hepsi çok güçlü yaklaşımlar, ancak basit uygulamaları gereksiz yere karmaşık ve hataya açık hale getiriyorlar. Yapılandırılmış eşzamanlılık, ilgili görev gruplarını bir iş birimi olarak ele alır, hata yönetimini ve görev iptalini basitleştirir ve güvenilirliği ve gözlemlenebilirliği artırır. Son önizlemeden bu yana hiçbir değişiklik yok. Aksine, OpenJDK'nın yaratıcıları “gerçek” dünyadan daha fazla geri bildirim almak istiyorlar.
JEP 487 – Kapsam Değerleri (Dördüncü Önizleme)
Değişmez verilerin hem iş parçacığı içi çağrılarda hem de alt iş parçacıklarında paylaşılabilmesi ve kullanılabilmesi için kapsam belirleme özelliği getirildi. Kapsamlı değerlerin anlaşılması daha kolaydır ancak benzer hedeflere sahiptir ThreadLocal-Değişkenler. Ayrıca, özellikle Sanal İş Parçacığı (JEP 444) ve Yapılandırılmış Eşzamanlılık (JEP 480) ile birlikte kullanıldıklarında daha düşük alan ve zaman gereksinimlerine sahiptirler. Bu sefer bir değişiklik var: yöntemler callWhere() VE runWhere() sınıftan çıkmışlardı ScopedValue KALDIRILDI. Bununla birlikte, işlevselliği yine de yöntemin sahibi olan Carrier sınıfının bir nesnesi aracılığıyla çağrılabilir. where() itibaren ScopedValue geri döndü. Bu, API'yi tamamen kusursuz hale getirir. fonksiyon call() Bu arada, işlem sırasında bir sonuç döndürüyor run() hiçbir şey döndürmez.
JEP 489 – Vektör API (dokuzuncu kuluçka makinesi)
Vector API, PEC'ler arasındaki dinozordur ve şu anda kuluçka döneminin dokuzuncu yılındadır. Java 16'dan itibaren sürümlerde düzenli olarak yer aldı. SIMD bilgisayar mimarilerinin modern olanaklarını vektör işlemcilerle desteklemekle ilgilidir. Tek Komutlu Çoklu Veri (SIMD), birçok işlemcinin aynı anda farklı verileri işlemesine olanak tanır. Donanım düzeyinde paralelleştirme, SIMD ilkesini kullanan yoğun bilgi işlem döngüleri için gereken çabayı azaltır. Kuluçka aşamasının uzun sürmesinin nedeni ise Valhalla Projesi ile yapılan koordinasyondan kaynaklanıyor. Tip sistemine (JEP 401: Değer Sınıfları ve Nesneler) ilişkin reformlar bekliyoruz. JDK geliştiricileri, Vector API'yi sonlandırmadan önce mevcut değer tabanlı sınıfları (referans türleri) değer sınıflarına (nesne kimliği olmadan) dönüştürmek ister. Değer türleri henüz OpenJDK 24 için planlanmadığından bu biraz zaman alabilir. Ancak en azından Brian Goetz (Oracle'da Java Dil Mimarı), 2024 yazında Valhalla projesinin uygulanmasında 10 yıl sonra bir atılım gerçekleştirdiğini duyurdu. . İlk önizleme belki burada OpenJDK 25 ile görünebilir.
JEP 486 – Güvenlik görevlisini kalıcı olarak devre dışı bırakır
Güvenlik Yöneticisi genellikle istemci tarafı Java kodunu (zengin istemciler, uygulamacıklar) korumak için kullanıldı, ancak nadiren sunucu tarafı için kullanıldı. Üstelik bakımı pahalıdır. Java 17 (2021) ile birlikte kaldırılmak üzere kullanımdan kaldırıldı olarak işaretlendi. Şimdi içeride genişliyor. Artık etkinleştirilemez ve diğer Java platformu sınıfları artık ona referans vermez. Ancak bu değişikliğin uygulamaların, kitaplıkların ve araçların büyük çoğunluğunu etkilemesi pek olası değildir. Gelecekteki bir Java sürümünde Güvenlik Yöneticisi API'si kalıcı olarak kaldırılacaktır.
JEP 492 – Esnek Yapı Yapıları (Üçüncü Önizleme)
Yapıcılarda artık açık bir yapıcı çağrısından önce ifadeler yapmak mümkün (super() VEYA this()) belli olmak. Bu ifadeler oluşturulmakta olan örneğe atıfta bulunmasa da, üst sınıfın parametrelerini veya erişim alanlarını doğrulayabilir veya dönüştürebilir. Başka bir kurucuyu çağırmadan önce alanları başlatmak, örneğin yöntemler geçersiz kılındığında sınıfı daha güvenilir hale getirir.
JEP 494 – Modül İthalat Beyanları (İkinci Önizleme)
Bu, bir modülün dışa aktarılan tüm paketlerinin artık aynı anda Java'ya aktarılabileceği anlamına gelir. Bu, modüler kitaplıkların yeniden kullanılmasını kolaylaştırır. Her durumda içe aktarılacak kodun bir modülde yer alması gerekli değildir. Bu ikinci önizlemede iki genişletme var. Bir yandan, Java.se modülünden (kendi paketleri/sınıfları olmayan bir tür toplayıcı modül) Java.base'e geçişli bağımlılıklara ilişkin kısıtlamalar kaldırıldı. Bu, artık bu modülü içe aktararak Java SE API'sinin tamamını içe aktarabileceğiniz anlamına gelir. Ayrıca, talep üzerine ithalat beyanları (örn. import java.util.*) önceki modül içe aktarma ifadelerini kapsar. Örneğin, Java.base ve Java.sql modülleri içe aktarılırsa sınıfın kullanımında belirsizlik olur. Date. Bunlar şu şekilde mevcuttur: java.util.Date ve nasıl java.sql.Date. Talep üzerine beyan yoluyla import java.util.* bu durumda bunu yapacak java.util.Date kullanılmış.
JEP 495 – Basit Kaynak Dosyaları ve Ana Örnek Yöntemleri (Dördüncü Önizleme)
Amaç, yeni başlayanların Java'ya başlamalarını kolaylaştırmak ve deneyimli geliştiricilere küçük uygulamaları kolayca oluşturup çalıştırma fırsatı vermektir. Hem yeni başlayanlar hem de ileri düzey kullanıcılar, büyük programlar için tasarlanmış dil özellikleriyle uğraşmak zorunda değildir. Bu dördüncü ön izlemede daha fazla geri bildirim toplanacak. Mevcut Java araç zincirini korurken ve Java için ayrı bir lehçe sunmayı amaçlamadan, yalnızca basitleştirilmiş bir dil içeren basit Java kaynak dosyaları main-Method (sınıf bildirimi olmadan) dahil, basit komut dosyası benzeri programlar oluşturur. Ayrıca yeni statik yöntemler standart giriş ve çıkışlarla çalışmayı kolaylaştırır print(), println() VE readln() sınıf java.io.IO. Bunlardan bazıları otomatik olarak içe aktarılır; bu, işlevlerin kullanıma hazır olduğu anlamına gelir.
(Ben)
Duyuru
Embarc Software Consulting GmbH'de yazılım mimarı, danışman ve eğitmen olarak Falk Sippach her zaman katılımcılarında, müşterilerinde ve meslektaşlarında ateşlenecek tutku kıvılcımını arıyor. 15 yılı aşkın bir süredir ağırlıklı olarak Java ortamında çevik yazılım geliştirme projelerine destek vermektedir. Topluluğun aktif bir parçası olarak (JUG Darmstadt'ın ortak organizatörü), aynı zamanda makalelerde, blog gönderilerinde, ayrıca konferanslardaki derslerde veya kullanıcı grubu toplantılarında bilgilerini paylaşmayı sever ve çeşitli etkinlik uzmanlarının organizasyonunu destekler. Falk @sippsack'ta tweet atıyor.
Geriye kalan özelliklere daha sonraki bir yazıda bakacağız. Belki daha fazlası eklenecektir. Dolayısıyla önümüzdeki birkaç hafta içinde neler olacağını görmekten heyecan duyabiliriz.
JEP 485 – Akış Toplayıcılar
İki önizlemenin ardından artık sonuçlandırma işlemine geçiyoruz. Java 8'de sunulan Stream API artık kendi ara işlemlerinizi eklemeyi destekliyor. Bu, akışlardaki verilerin artık daha önce yerleşik birkaç ara işlemden daha iyi ve daha optimize edilmiş bir şekilde dönüştürülebileceği anlamına geliyor. Bu, akış boru hatlarının artık daha esnek ve anlamlı bir şekilde uygulanabileceği anlamına geliyor. OpenJDK ayrıca bazı yeni işlemler de sağlar: fold, mapConcurrent, scan, windowFixed VE windowSliding. Diğerleri gelecekte nispeten kolaylıkla takip edebilir.
JEP 484 – Sınıf Dosyası API'si
İki ön izlemeden sonra, Java Sanal Makinesi spesifikasyonuna dayanan Java bayt kodunu (sınıf dosyaları) ayrıştırmaya, oluşturmaya ve dönüştürmeye yönelik yeni standart artık tamamlandı. Gelecekte tüm JDK bileşenleri bu standart API'ye taşınabilir. Sonunda JDK geliştiricileri dahili kopyayı ve dolayısıyla üçüncü taraf ASM kitaplığına bağımlılığı kaldırabilir.
JEP 488 – Desenlerdeki ilkel türler, örnek oluşturma ve anahtarlar (ikinci önizleme)
Bu ikinci önizleme, kalıp eşleştirmeyi benzer ilkel veri türlerine genişletmekle ilgilidir int, byte VE double tüm desen bağlamlarında kullanılabilir, yani instanceof ve içeride switch. Bu, geliştiricilerin daha az sınırlamaya ve özel duruma sahip olduğu ve aynı zamanda ilkel ve referans veri türlerini tür şablonları bağlamında veya kayıt şablonlarının bileşenleri olarak birbirinin yerine kullanabileceği anlamına gelir. İlk önizlemeden bu yana herhangi bir değişiklik olmadı ancak JDK geliştiricileri daha fazla geri bildirim toplamak istiyor.
JEP 499 – Yapılandırılmış Yarışma (Dördüncü Ön İzleme)
Birkaç paralel alt görevi işlerken, yapılandırılmış eşzamanlılık, uygulamanın özellikle okunabilir ve bakımı kolay bir şekilde yapılmasına olanak tanır. Alternatif olarak geliştiriciler bu amaç için zaten paralel akışları, ExecutorService'i veya reaktif programlamayı kullanabiliyor. Hepsi çok güçlü yaklaşımlar, ancak basit uygulamaları gereksiz yere karmaşık ve hataya açık hale getiriyorlar. Yapılandırılmış eşzamanlılık, ilgili görev gruplarını bir iş birimi olarak ele alır, hata yönetimini ve görev iptalini basitleştirir ve güvenilirliği ve gözlemlenebilirliği artırır. Son önizlemeden bu yana hiçbir değişiklik yok. Aksine, OpenJDK'nın yaratıcıları “gerçek” dünyadan daha fazla geri bildirim almak istiyorlar.
JEP 487 – Kapsam Değerleri (Dördüncü Önizleme)
Değişmez verilerin hem iş parçacığı içi çağrılarda hem de alt iş parçacıklarında paylaşılabilmesi ve kullanılabilmesi için kapsam belirleme özelliği getirildi. Kapsamlı değerlerin anlaşılması daha kolaydır ancak benzer hedeflere sahiptir ThreadLocal-Değişkenler. Ayrıca, özellikle Sanal İş Parçacığı (JEP 444) ve Yapılandırılmış Eşzamanlılık (JEP 480) ile birlikte kullanıldıklarında daha düşük alan ve zaman gereksinimlerine sahiptirler. Bu sefer bir değişiklik var: yöntemler callWhere() VE runWhere() sınıftan çıkmışlardı ScopedValue KALDIRILDI. Bununla birlikte, işlevselliği yine de yöntemin sahibi olan Carrier sınıfının bir nesnesi aracılığıyla çağrılabilir. where() itibaren ScopedValue geri döndü. Bu, API'yi tamamen kusursuz hale getirir. fonksiyon call() Bu arada, işlem sırasında bir sonuç döndürüyor run() hiçbir şey döndürmez.
JEP 489 – Vektör API (dokuzuncu kuluçka makinesi)
Vector API, PEC'ler arasındaki dinozordur ve şu anda kuluçka döneminin dokuzuncu yılındadır. Java 16'dan itibaren sürümlerde düzenli olarak yer aldı. SIMD bilgisayar mimarilerinin modern olanaklarını vektör işlemcilerle desteklemekle ilgilidir. Tek Komutlu Çoklu Veri (SIMD), birçok işlemcinin aynı anda farklı verileri işlemesine olanak tanır. Donanım düzeyinde paralelleştirme, SIMD ilkesini kullanan yoğun bilgi işlem döngüleri için gereken çabayı azaltır. Kuluçka aşamasının uzun sürmesinin nedeni ise Valhalla Projesi ile yapılan koordinasyondan kaynaklanıyor. Tip sistemine (JEP 401: Değer Sınıfları ve Nesneler) ilişkin reformlar bekliyoruz. JDK geliştiricileri, Vector API'yi sonlandırmadan önce mevcut değer tabanlı sınıfları (referans türleri) değer sınıflarına (nesne kimliği olmadan) dönüştürmek ister. Değer türleri henüz OpenJDK 24 için planlanmadığından bu biraz zaman alabilir. Ancak en azından Brian Goetz (Oracle'da Java Dil Mimarı), 2024 yazında Valhalla projesinin uygulanmasında 10 yıl sonra bir atılım gerçekleştirdiğini duyurdu. . İlk önizleme belki burada OpenJDK 25 ile görünebilir.
JEP 486 – Güvenlik görevlisini kalıcı olarak devre dışı bırakır
Güvenlik Yöneticisi genellikle istemci tarafı Java kodunu (zengin istemciler, uygulamacıklar) korumak için kullanıldı, ancak nadiren sunucu tarafı için kullanıldı. Üstelik bakımı pahalıdır. Java 17 (2021) ile birlikte kaldırılmak üzere kullanımdan kaldırıldı olarak işaretlendi. Şimdi içeride genişliyor. Artık etkinleştirilemez ve diğer Java platformu sınıfları artık ona referans vermez. Ancak bu değişikliğin uygulamaların, kitaplıkların ve araçların büyük çoğunluğunu etkilemesi pek olası değildir. Gelecekteki bir Java sürümünde Güvenlik Yöneticisi API'si kalıcı olarak kaldırılacaktır.
JEP 492 – Esnek Yapı Yapıları (Üçüncü Önizleme)
Yapıcılarda artık açık bir yapıcı çağrısından önce ifadeler yapmak mümkün (super() VEYA this()) belli olmak. Bu ifadeler oluşturulmakta olan örneğe atıfta bulunmasa da, üst sınıfın parametrelerini veya erişim alanlarını doğrulayabilir veya dönüştürebilir. Başka bir kurucuyu çağırmadan önce alanları başlatmak, örneğin yöntemler geçersiz kılındığında sınıfı daha güvenilir hale getirir.
JEP 494 – Modül İthalat Beyanları (İkinci Önizleme)
Bu, bir modülün dışa aktarılan tüm paketlerinin artık aynı anda Java'ya aktarılabileceği anlamına gelir. Bu, modüler kitaplıkların yeniden kullanılmasını kolaylaştırır. Her durumda içe aktarılacak kodun bir modülde yer alması gerekli değildir. Bu ikinci önizlemede iki genişletme var. Bir yandan, Java.se modülünden (kendi paketleri/sınıfları olmayan bir tür toplayıcı modül) Java.base'e geçişli bağımlılıklara ilişkin kısıtlamalar kaldırıldı. Bu, artık bu modülü içe aktararak Java SE API'sinin tamamını içe aktarabileceğiniz anlamına gelir. Ayrıca, talep üzerine ithalat beyanları (örn. import java.util.*) önceki modül içe aktarma ifadelerini kapsar. Örneğin, Java.base ve Java.sql modülleri içe aktarılırsa sınıfın kullanımında belirsizlik olur. Date. Bunlar şu şekilde mevcuttur: java.util.Date ve nasıl java.sql.Date. Talep üzerine beyan yoluyla import java.util.* bu durumda bunu yapacak java.util.Date kullanılmış.
JEP 495 – Basit Kaynak Dosyaları ve Ana Örnek Yöntemleri (Dördüncü Önizleme)
Amaç, yeni başlayanların Java'ya başlamalarını kolaylaştırmak ve deneyimli geliştiricilere küçük uygulamaları kolayca oluşturup çalıştırma fırsatı vermektir. Hem yeni başlayanlar hem de ileri düzey kullanıcılar, büyük programlar için tasarlanmış dil özellikleriyle uğraşmak zorunda değildir. Bu dördüncü ön izlemede daha fazla geri bildirim toplanacak. Mevcut Java araç zincirini korurken ve Java için ayrı bir lehçe sunmayı amaçlamadan, yalnızca basitleştirilmiş bir dil içeren basit Java kaynak dosyaları main-Method (sınıf bildirimi olmadan) dahil, basit komut dosyası benzeri programlar oluşturur. Ayrıca yeni statik yöntemler standart giriş ve çıkışlarla çalışmayı kolaylaştırır print(), println() VE readln() sınıf java.io.IO. Bunlardan bazıları otomatik olarak içe aktarılır; bu, işlevlerin kullanıma hazır olduğu anlamına gelir.
(Ben)