2 điểm bởi GN⁺ 2024-09-06 | 1 bình luận | Chia sẻ qua WhatsApp

Clojure 1.12.0

Tương thích

Java 8 - Thông báo kết thúc hỗ trợ tương thích

  • Clojure 1.12 tạo bytecode Java 8, nhưng đây là bản phát hành cuối cùng sử dụng Java 8.
  • Các bản phát hành sau đó sẽ chuyển sang bản phát hành Java LTS mới hơn.

Java 21 - Ghim virtual thread trong mã người dùng

  • Với người dùng Clojure muốn sử dụng virtual thread trên JDK 21, trong phiên bản 1.12, lazy-seqdelay dùng lock thay cho khối synchronized.

Bảo mật

  • Đã sửa lỗ hổng bảo mật CVE-2024-22871.

Tuần tự hóa

  • Các kiểu dữ liệu Clojure triển khai giao diện tuần tự hóa của Java.
  • Trong 1.11.0, mã định danh tuần tự hóa của hai lớp đã bị thay đổi, nhưng điều này đã được hoàn tác trong 1.11.1.
  • Trong 1.12.0, công việc cho các lớp còn lại đã được hoàn tất.

Phụ thuộc

  • Cập nhật phụ thuộc spec.alpha lên 0.5.238.
  • Cập nhật phụ thuộc core.specs.alpha lên 0.4.74.

Tính năng

Thêm thư viện tương tác

  • Cung cấp các hàm mới cho phép thêm thư viện mà không cần khởi động lại JVM.
  • Đã thêm các hàm add-lib, add-libs, sync-deps.

Khởi chạy và điều khiển tiến trình bên ngoài

  • Thêm namespace mới clojure.java.process.
  • Có thể điều khiển tiến trình bên ngoài bằng các hàm startexec.

Giá trị phương thức

  • Thêm khả năng sử dụng phương thức Java như hàm bậc cao.
  • Trình biên dịch sẽ tự động tạo hàm bao bọc.

Phương thức định danh đầy đủ

  • Có thể dùng các phương thức định danh đầy đủ làm giá trị bằng cú pháp Classname/method, Classname/.method, Classname/new.

Metadata :param-tags

  • Có thể cung cấp metadata :param-tags cho các phương thức định danh đầy đủ để phân giải các phương thức nạp chồng.

Cú pháp lớp mảng

  • Thêm cú pháp biểu diễn lớp mảng. Ví dụ: String/2 biểu thị mảng chuỗi hai chiều.

Giao diện hàm

  • Có thể chuyển giao diện hàm Java thành hàm Clojure để sử dụng.

Khả năng tương tác với Java Supplier

  • Các đối tượng triển khai IDeref nay trực tiếp triển khai giao diện Supplier.

Hỗ trợ stream

  • Có thể xử lý stream theo phong cách Clojure với các hàm stream-seq!, stream-reduce!, stream-transduce!, stream-into!.

PersistentVector triển khai Spliterable

  • PersistentVector giờ đây cung cấp spliterator tùy biến hỗ trợ xử lý song song.

drop và partition hiệu quả hơn

  • Hiệu năng của các hàm drop, nthrest, nthnext được cải thiện.
  • Thêm các hàm mới partitionv, partitionv-all, splitv-at.

Chính sách intern Var

  • Khi intern var trong namespace, sẽ tạo tham chiếu ổn định.
  • Giải quyết vấn đề phát sinh trong 1.11.0.

Tóm tắt của GN⁺

  • Clojure 1.12.0 là bản phát hành cuối cùng sử dụng Java 8, và các bản phát hành sau sẽ chuyển sang bản phát hành Java LTS mới hơn.
  • Các tính năng mới bao gồm thêm thư viện tương tác, điều khiển tiến trình bên ngoài và sử dụng giá trị phương thức.
  • Khả năng tương tác với Java đã được cải thiện đáng kể, đồng thời bổ sung các tính năng drop và partition hiệu quả hơn.
  • Đây là bản cập nhật hữu ích cho người dùng Clojure, có thể nâng cao năng suất phát triển.

1 bình luận

 
GN⁺ 2024-09-06
Ý kiến Hacker News
  • Tôi bắt đầu quan tâm đến Clojure sau khi xem các bài giảng của Rich trên YouTube. Hiện đang suy nghĩ về cách đưa nó vào công ty
    • Tôi nghĩ bài học về sự đơn giản là vô cùng quan trọng
  • Bản phát hành này bao gồm rất nhiều tính năng mới tuyệt vời
    • Cá nhân tôi thích nhất tính năng add-libs
    • Việc viết demo một tệp hoặc ví dụ tối thiểu trở nên dễ dàng, nên cũng thuận tiện hơn để chia sẻ
    • Nó cũng hữu ích khi demo các thư viện Java
  • Tôi đã nghĩ sẽ phải đợi đến Clojure/conj 2024
    • Tôi đang chờ spec2, nhưng hiện tại vẫn dùng Malli
    • Với thay đổi ở giao diện tính năng, không còn cần phải duy trì các macro tiện ích nữa
  • Dù có rất nhiều tính năng mới được thêm vào, mã vẫn chạy nguyên như cũ
  • Các tính năng add-libs và sync-deps rất hữu ích
    • Bản phát hành lần này có phạm vi khác với các bản phát hành trước
  • Có ý kiến thắc mắc về trạng thái của spec
  • Clojure kết hợp Lisp với hệ sinh thái Java nên rất phù hợp để xây dựng các hệ thống backend
    • Hơi tiếc là nó chưa phản ánh đầy đủ một số đổi mới kể từ Java 8
  • Thay đổi ở giao diện tính năng là cực kỳ quan trọng
    • Duy trì khả năng tương tác với Java là một thế mạnh của Clojure
  • Có rất nhiều cải tiến tuyệt vời
    • Đây là ngôn ngữ họ Lisp mà tôi dùng chủ yếu
  • Tôi vui vì Clojure vẫn đang được duy trì rất mạnh mẽ