2 पॉइंट द्वारा GN⁺ 2024-09-06 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Clojure 1.12.0

संगतता

Java 8 - संगतता समाप्ति की सूचना

  • Clojure 1.12 Java 8 bytecode बनाता है, लेकिन यह Java 8 का उपयोग करने वाली आखिरी रिलीज़ है.
  • इसके बाद की रिलीज़ नए Java LTS रिलीज़ पर जाएंगी.

Java 21 - user code में virtual thread pinning

  • JDK 21 में virtual threads का उपयोग करना चाहने वाले Clojure users के लिए, 1.12 में lazy-seq और delay अब synchronized blocks की जगह locks का उपयोग करते हैं.

सुरक्षा

  • CVE-2024-22871 सुरक्षा कमजोरी को ठीक किया गया.

Serialization

  • Clojure data types Java serialization interface को implement करते हैं.
  • 1.11.0 में दो classes के serialization identifiers बदल गए थे, लेकिन 1.11.1 में इसे वापस कर दिया गया.
  • 1.12.0 में बाकी classes के लिए यह काम पूरा किया गया.

Dependencies

  • spec.alpha dependency को 0.5.238 पर update किया गया.
  • core.specs.alpha dependency को 0.4.74 पर update किया गया.

फीचर्स

लाइब्रेरी को इंटरैक्टिव तरीके से जोड़ना

  • JVM को restart किए बिना libraries जोड़ने के लिए नए functions दिए गए हैं.
  • add-lib, add-libs, sync-deps functions जोड़े गए हैं.

external processes शुरू करना और नियंत्रित करना

  • नया namespace clojure.java.process जोड़ा गया.
  • start और exec functions से external processes को नियंत्रित किया जा सकता है.

method values

  • Java methods को higher-order functions के रूप में इस्तेमाल करने की सुविधा जोड़ी गई.
  • compiler अपने आप wrapper functions बनाता है.

qualified methods

  • Classname/method, Classname/.method, Classname/new syntax का उपयोग करके qualified methods को values के रूप में इस्तेमाल किया जा सकता है.

:param-tags metadata

  • qualified methods पर :param-tags metadata देकर overloaded methods को resolve किया जा सकता है.

array class syntax

  • array classes को दर्शाने के लिए syntax जोड़ा गया. उदाहरण: String/2 2-dimensional string array को दर्शाता है.

functional interfaces

  • Java functional interfaces को Clojure functions में बदलकर इस्तेमाल किया जा सकता है.

Java Supplier interoperability

  • IDeref implementations अब सीधे Supplier interface को implement करती हैं.

stream support

  • stream-seq!, stream-reduce!, stream-transduce!, stream-into! functions के साथ streams को Clojure शैली में प्रोसेस किया जा सकता है.

PersistentVector का Spliterable implementation

  • PersistentVector अब parallel processing को support करने वाला custom spliterator प्रदान करता है.

अधिक कुशल drop और partition

  • drop, nthrest, nthnext functions की performance बेहतर हुई है.
  • नए functions partitionv, partitionv-all, splitv-at जोड़े गए हैं.

Var intern policy

  • namespace में var intern करते समय stable references बनाए जाते हैं.
  • 1.11.0 में आई समस्या को ठीक किया गया.

GN⁺ का सारांश

  • Clojure 1.12.0, Java 8 का उपयोग करने वाली आखिरी रिलीज़ है, और इसके बाद की रिलीज़ नए Java LTS रिलीज़ पर जाएंगी.
  • नए फीचर्स में libraries को इंटरैक्टिव तरीके से जोड़ना, external process control, और method values का उपयोग शामिल है.
  • Java के साथ interoperability में बड़ा सुधार हुआ है, और अधिक कुशल drop तथा partition फीचर्स जोड़े गए हैं.
  • यह Clojure users के लिए उपयोगी अपडेट है, जो development productivity बढ़ा सकता है.

1 टिप्पणियां

 
GN⁺ 2024-09-06
Hacker News की राय
  • Rich के YouTube लेक्चर देखते हुए Clojure में दिलचस्पी हुई। इसे कंपनी में अपनाने का तरीका सोच रहा/रही हूँ
    • मुझे लगता है कि simplicity के बारे में इसका सबक बहुत महत्वपूर्ण है
  • इस रिलीज़ में कई शानदार नए फीचर शामिल हैं
    • व्यक्तिगत रूप से मुझे add-libs फीचर सबसे ज़्यादा पसंद है
    • इससे single-file डेमो या minimal example लिखना आसान हो जाता है, इसलिए शेयर करना भी आसान है
    • Java लाइब्रेरी का डेमो करते समय भी यह उपयोगी है
  • लगा था कि इसे Clojure/conj 2024 तक रोका जाएगा
    • spec2 का इंतज़ार है, लेकिन फिलहाल Malli इस्तेमाल कर रहा/रही हूँ
    • function interface में बदलाव के कारण अब utility macro बनाए रखने की ज़रूरत नहीं रही
  • बहुत सारे नए फीचर जोड़े गए हैं, लेकिन कोड पहले जैसा ही काम करता है
  • add-libs और sync-deps फीचर बहुत उपयोगी हैं
    • इस बार की रिलीज़ का दायरा पिछली रिलीज़ से अलग है
  • कुछ लोगों ने spec की स्थिति को लेकर जिज्ञासा जताई है
  • Clojure, Lisp और Java ecosystem को जोड़ता है, इसलिए backend system बनाने के लिए अच्छा है
    • अफ़सोस की बात है कि इसमें Java 8 के बाद की कुछ innovations पूरी तरह नहीं दिखतीं
  • function interface में बदलाव बहुत महत्वपूर्ण है
    • Java के साथ interoperability बनाए रखना Clojure की ताकत है
  • कई शानदार सुधार हुए हैं
    • यह मेरी मुख्य Lisp-परिवार की भाषा है
  • यह देखकर खुशी होती है कि Clojure अब भी मज़बूती से कायम है