2 poin oleh GN⁺ 2024-09-06 | 1 komentar | Bagikan ke WhatsApp

Clojure 1.12.0

Kompatibilitas

Java 8 - Pemberitahuan berakhirnya kompatibilitas

  • Clojure 1.12 menghasilkan bytecode Java 8, tetapi ini adalah rilis terakhir yang menggunakan Java 8.
  • Rilis berikutnya direncanakan akan beralih ke rilis Java LTS yang lebih baru.

Java 21 - Pemasangan virtual thread pada kode pengguna

  • Untuk pengguna Clojure yang ingin menggunakan virtual thread di JDK 21, pada 1.12 lazy-seq dan delay menggunakan lock alih-alih blok synchronized.

Keamanan

  • Memperbaiki kerentanan keamanan CVE-2024-22871.

Serialisasi

  • Tipe data Clojure mengimplementasikan antarmuka serialisasi Java.
  • Pada 1.11.0, pengenal serialisasi dari dua kelas berubah, tetapi ini dikembalikan pada 1.11.1.
  • Pada 1.12.0, pekerjaan untuk kelas-kelas yang tersisa telah diselesaikan.

Dependensi

  • Dependensi spec.alpha diperbarui ke 0.5.238.
  • Dependensi core.specs.alpha diperbarui ke 0.4.74.

Fitur

Penambahan library secara interaktif

  • Menyediakan fungsi baru untuk menambahkan library tanpa me-restart JVM.
  • Fungsi add-lib, add-libs, sync-deps telah ditambahkan.

Memulai dan mengendalikan proses eksternal

  • Namespace baru clojure.java.process ditambahkan.
  • Dengan fungsi start dan exec, proses eksternal dapat dikendalikan.

Nilai method

  • Menambahkan kemampuan untuk menggunakan method Java sebagai fungsi tingkat tinggi.
  • Compiler secara otomatis membuat fungsi pembungkus.

Method berkualifikasi

  • Dengan sintaks Classname/method, Classname/.method, Classname/new, method berkualifikasi dapat digunakan sebagai nilai.

Metadata :param-tags

  • Dengan menyediakan metadata :param-tags pada method berkualifikasi, method yang di-overload dapat diselesaikan.

Sintaks kelas array

  • Menambahkan sintaks untuk merepresentasikan kelas array. Contoh: String/2 merepresentasikan array string dua dimensi.

Antarmuka fungsional

  • Antarmuka fungsional Java dapat dikonversi dan digunakan sebagai fungsi Clojure.

Interoperabilitas Java Supplier

  • Implementasi IDeref kini langsung mengimplementasikan antarmuka Supplier.

Dukungan stream

  • Stream dapat diproses dengan gaya Clojure melalui fungsi stream-seq!, stream-reduce!, stream-transduce!, stream-into!.

Implementasi Spliterable pada PersistentVector

  • PersistentVector kini menyediakan spliterator kustom yang mendukung pemrosesan paralel.

drop dan partition yang efisien

  • Kinerja fungsi drop, nthrest, nthnext ditingkatkan.
  • Fungsi baru partitionv, partitionv-all, splitv-at ditambahkan.

Kebijakan intern Var

  • Saat meng-intern var di namespace, referensi yang stabil akan dibuat.
  • Ini menyelesaikan masalah yang muncul pada 1.11.0.

Ringkasan GN⁺

  • Clojure 1.12.0 adalah rilis terakhir yang menggunakan Java 8, dan rilis berikutnya direncanakan akan beralih ke rilis Java LTS yang lebih baru.
  • Fitur baru mencakup penambahan library secara interaktif, pengendalian proses eksternal, dan penggunaan nilai method.
  • Interoperabilitas dengan Java meningkat secara signifikan, serta fitur drop dan partition yang lebih efisien ditambahkan.
  • Ini adalah pembaruan yang berguna bagi pengguna Clojure dan dapat meningkatkan produktivitas pengembangan.

1 komentar

 
GN⁺ 2024-09-06
Opini Hacker News
  • Mulai tertarik pada Clojure setelah menonton kuliah Rich di YouTube. Sedang memikirkan cara mengadopsinya di perusahaan
    • Merasa pelajaran tentang kesederhanaan sangat penting
  • Rilis kali ini mencakup banyak fitur baru yang keren
    • Secara pribadi paling menyukai fitur add-libs
    • Jadi bisa menulis demo satu file atau contoh minimal yang mudah dibagikan
    • Juga berguna saat mendemokan library Java
  • Mengira harus menunggu sampai Clojure/conj 2024
    • Menantikan spec2, tetapi saat ini menggunakan Malli
    • Karena perubahan antarmuka fungsi, tidak perlu lagi mempertahankan utility macro
  • Banyak fitur baru ditambahkan, tetapi kodenya tetap berjalan
  • Fitur add-libs dan sync-deps sangat berguna
    • Rilis ini memiliki cakupan yang berbeda dari rilis sebelumnya
  • Ada pendapat yang penasaran dengan status spec
  • Clojure bagus untuk membangun sistem backend dengan menggabungkan ekosistem Lisp dan Java
    • Agak disayangkan karena belum banyak mencerminkan sebagian inovasi setelah Java 8
  • Perubahan antarmuka fungsi sangat penting
    • Menjaga interoperabilitas dengan Java adalah kekuatan Clojure
  • Ada banyak peningkatan keren
    • Ini adalah bahasa keluarga Lisp yang paling sering digunakan
  • Senang Clojure masih tetap kuat