Clojure 1.12.0
Uyumluluk
Java 8 - uyumluluk sonu duyurusu
- Clojure 1.12, Java 8 bytecode üretir, ancak bu Java 8 kullanan son sürümdür.
- Sonraki sürümler yeni Java LTS sürümlerine geçecektir.
Java 21 - kullanıcı kodunda sanal iş parçacığı sabitleme
- JDK 21 üzerinde sanal iş parçacıkları kullanmak isteyen Clojure kullanıcıları için, 1.12'de
lazy-seq ve delay, synchronized blokları yerine kilit kullanır.
Güvenlik
- CVE-2024-22871 güvenlik açığı düzeltildi.
Serileştirme
- Clojure veri türleri Java serileştirme arayüzünü uygular.
- 1.11.0'da iki sınıfın serileştirme tanımlayıcıları değiştirilmişti, ancak 1.11.1'de bu geri alındı.
- 1.12.0'da kalan sınıflarla ilgili çalışma tamamlandı.
Bağımlılıklar
spec.alpha bağımlılığı 0.5.238'e güncellendi.
core.specs.alpha bağımlılığı 0.4.74'e güncellendi.
Özellikler
Kütüphaneleri etkileşimli olarak ekleme
- JVM'yi yeniden başlatmadan kütüphane eklemeyi sağlayan yeni işlevler sunuluyor.
add-lib, add-libs, sync-deps işlevleri eklendi.
Harici süreç başlatma ve kontrol
- Yeni
clojure.java.process namespace'i eklendi.
start ve exec işlevleriyle harici süreçler kontrol edilebiliyor.
Metot değerleri
- Java metotlarını yüksek dereceli işlevler olarak kullanma özelliği eklendi.
- Derleyici otomatik olarak sarmalayıcı işlevler üretir.
Nitelikli metotlar
Classname/method, Classname/.method, Classname/new sözdizimi kullanılarak nitelikli metotlar değer olarak kullanılabilir.
:param-tags metaverisi
- Nitelikli metotlara
:param-tags metaverisi verilerek aşırı yüklenmiş metotlar çözümlenebilir.
Dizi sınıfı sözdizimi
- Dizi sınıflarını ifade eden sözdizimi eklendi. Örneğin:
String/2, iki boyutlu bir string dizisini ifade eder.
Fonksiyonel arayüzler
- Java fonksiyonel arayüzleri Clojure işlevlerine dönüştürülerek kullanılabilir.
Java Supplier birlikte çalışabilirliği
IDeref uygulamaları artık Supplier arayüzünü doğrudan uygular.
Stream desteği
stream-seq!, stream-reduce!, stream-transduce!, stream-into! işlevleriyle stream'ler Clojure tarzında işlenebilir.
PersistentVector için Spliterable uygulaması
PersistentVector artık paralel işlemeyi destekleyen özel bir spliterator sunuyor.
Verimli drop ve partition
drop, nthrest, nthnext işlevlerinin performansı iyileştirildi.
- Yeni
partitionv, partitionv-all, splitv-at işlevleri eklendi.
Var intern politikası
- Namespace içinde var intern edilirken kararlı başvurular oluşturulur.
- 1.11.0'da ortaya çıkan sorun çözüldü.
GN⁺ Özeti
- Clojure 1.12.0, Java 8 kullanan son sürüm ve sonraki sürümler yeni Java LTS sürümlerine geçecek.
- Yeni özellikler arasında kütüphaneleri etkileşimli ekleme, harici süreç kontrolü ve metot değerleri kullanımı yer alıyor.
- Java ile birlikte çalışabilirlik önemli ölçüde geliştirildi ve daha verimli drop ile partition özellikleri eklendi.
- Clojure kullanıcıları için yararlı bir güncelleme olarak geliştirme üretkenliğini artırabilir.
1 yorum
Hacker News görüşleri
add-libsözelliğini beğendimspec2'yi bekliyorum ama şu anda Malli kullanıyorumadd-libsvesync-depsözellikleri çok kullanışlıspec'in durumu hakkında merak eden görüşler var