Clojure 1.12.0
ความเข้ากันได้
Java 8 - ประกาศยุติการรองรับ
- Clojure 1.12 ยังสร้าง Java 8 bytecode ได้ แต่รีลีสนี้จะเป็นรีลีสสุดท้ายที่ใช้ Java 8
- รีลีสถัดไปจะย้ายไปใช้ Java LTS รุ่นใหม่
Java 21 - การ pin virtual thread ในโค้ดของผู้ใช้
- สำหรับผู้ใช้ Clojure ที่ต้องการใช้ virtual thread บน JDK 21 ในเวอร์ชัน 1.12
lazy-seq และ delay จะใช้ lock แทน synchronized block
ความปลอดภัย
- แก้ไขช่องโหว่ความปลอดภัย CVE-2024-22871
การซีเรียลไลซ์
- ชนิดข้อมูลของ Clojure implements Java serialization interface
- ใน 1.11.0 ตัวระบุการซีเรียลไลซ์ของคลาส 2 ตัวถูกเปลี่ยนไป แต่ใน 1.11.1 ได้ย้อนกลับการเปลี่ยนแปลงนี้
- ใน 1.12.0 ได้ทำงานส่วนที่เหลือสำหรับคลาสอื่น ๆ เสร็จสมบูรณ์
การพึ่งพา
- อัปเดต dependency
spec.alpha เป็น 0.5.238
- อัปเดต dependency
core.specs.alpha เป็น 0.4.74
ความสามารถ
เพิ่มไลบรารีแบบอินเทอร์แอ็กทีฟ
- มีฟังก์ชันใหม่ที่ช่วยเพิ่มไลบรารีได้โดยไม่ต้องรีสตาร์ต JVM
- เพิ่มฟังก์ชัน
add-lib, add-libs, sync-deps
เริ่มและควบคุม external process
- เพิ่ม namespace ใหม่
clojure.java.process
- สามารถควบคุม external process ได้ด้วยฟังก์ชัน
start และ exec
Method values
- เพิ่มความสามารถในการใช้ Java method เป็น higher-order function
- คอมไพเลอร์จะสร้างฟังก์ชัน wrapper ให้โดยอัตโนมัติ
Qualified methods
- สามารถใช้ qualified method เป็นค่าได้ด้วยไวยากรณ์
Classname/method, Classname/.method, Classname/new
เมตาดาตา :param-tags
- สามารถใส่เมตาดาตา :param-tags ให้กับ qualified method เพื่อแก้ปัญหาการเลือก overloaded method ได้
ไวยากรณ์คลาสอาร์เรย์
- เพิ่มไวยากรณ์สำหรับแทน array class ตัวอย่าง:
String/2 หมายถึงอาร์เรย์สตริง 2 มิติ
Functional interface
- สามารถแปลง Java functional interface ให้ใช้เป็นฟังก์ชัน Clojure ได้
การทำงานร่วมกับ Java Supplier
- ตอนนี้ implementation ของ
IDeref implements interface Supplier ได้โดยตรง
รองรับสตรีม
- สามารถจัดการสตรีมในแบบของ Clojure ได้ด้วยฟังก์ชัน
stream-seq!, stream-reduce!, stream-transduce!, stream-into!
การ implements Spliterable ของ PersistentVector
- ตอนนี้
PersistentVector มี custom spliterator ที่รองรับการประมวลผลแบบขนาน
drop และ partition ที่มีประสิทธิภาพขึ้น
- ปรับปรุงประสิทธิภาพของฟังก์ชัน
drop, nthrest, nthnext
- เพิ่มฟังก์ชันใหม่
partitionv, partitionv-all, splitv-at
นโยบายการ intern Var
- เมื่อ intern var ใน namespace จะสร้าง reference ที่เสถียร
- แก้ปัญหาที่เกิดขึ้นใน 1.11.0
สรุปโดย GN⁺
- Clojure 1.12.0 เป็นรีลีสสุดท้ายที่ใช้ Java 8 และรีลีสถัดไปจะย้ายไปใช้ Java LTS รุ่นใหม่
- ฟีเจอร์ใหม่ได้แก่ การเพิ่มไลบรารีแบบอินเทอร์แอ็กทีฟ การควบคุม external process และการใช้ method values
- การทำงานร่วมกับ Java ได้รับการปรับปรุงอย่างมาก พร้อมเพิ่มความสามารถ drop และ partition ที่มีประสิทธิภาพขึ้น
- เป็นการอัปเดตที่มีประโยชน์สำหรับผู้ใช้ Clojure และช่วยเพิ่มประสิทธิภาพการพัฒนาได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
add-libsมากที่สุดadd-libsและsync-depsมีประโยชน์มาก