2 puan yazan GN⁺ 2024-09-06 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-09-06
Hacker News görüşleri
  • Rich'in YouTube derslerini izlerken Clojure'a ilgi duymaya başladım. Şirkette nasıl devreye alabileceğimi düşünüyorum
    • Sadelik konusundaki derslerin çok önemli olduğunu düşünüyorum
  • Bu sürüm birçok harika yeni özellik içeriyor
    • Kişisel olarak en çok add-libs özelliğini beğendim
    • Tek dosyalık demo veya minimal örnekler yazmayı mümkün kılıyor, bu da paylaşmayı kolaylaştırıyor
    • Java kütüphanelerini demo ederken de faydalı
  • Clojure/conj 2024'e kadar bekleyeceğini sanıyordum
    • spec2'yi bekliyorum ama şu anda Malli kullanıyorum
    • Fonksiyon arayüzü değişikliği sayesinde artık yardımcı makroları korumaya gerek kalmadı
  • Birçok yeni özellik eklendi ama kod olduğu gibi çalışıyor
  • add-libs ve sync-deps özellikleri çok kullanışlı
    • Bu sürümün kapsamı önceki sürümlerden farklı
  • spec'in durumu hakkında merak eden görüşler var
  • Clojure, Lisp ile Java ekosistemini birleştirerek backend sistemler kurmak için iyi
    • Java 8 sonrasındaki yeniliklerin bir kısmını yansıtmamış olması üzücü
  • Fonksiyon arayüzü değişikliği çok önemli
    • Java ile birlikte çalışabilirliği korumak Clojure'un güçlü yönlerinden biri
  • Birçok harika iyileştirme var
    • En sık kullandığım Lisp ailesi dili
  • Clojure'un hâlâ güçlü kalmasına seviniyorum