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
Opini Hacker News