2 ポイント 投稿者 GN⁺ 2024-09-06 | 1件のコメント | WhatsAppで共有

Clojure 1.12.0

互換性

Java 8 - 互換性終了のお知らせ

  • Clojure 1.12 は Java 8 バイトコードを生成するが、Java 8 を使用する最後のリリースである。
  • 今後のリリースは新しい Java LTS リリースへ移行する予定である。

Java 21 - ユーザーコードでの仮想スレッドのピン留め

  • JDK 21 で仮想スレッドを使用したい Clojure ユーザー向けに、1.12 では lazy-seqdelaysynchronized ブロックの代わりにロックを使用する。

セキュリティ

  • CVE-2024-22871 のセキュリティ脆弱性を修正。

シリアライズ

  • Clojure のデータ型は Java のシリアライズインターフェースを実装している。
  • 1.11.0 では 2 つのクラスのシリアライズ識別子が変更されたが、1.11.1 でこれを元に戻した。
  • 1.12.0 では残りのクラスに対する作業を完了した。

依存関係

  • spec.alpha 依存関係を 0.5.238 に更新。
  • core.specs.alpha 依存関係を 0.4.74 に更新。

機能

ライブラリの対話的追加

  • JVM を再起動せずにライブラリを追加できる新しい関数を提供。
  • add-libadd-libssync-deps 関数が追加された。

外部プロセスの起動と制御

  • 新しい名前空間 clojure.java.process を追加。
  • startexec 関数で外部プロセスを制御できる。

メソッド値

  • Java メソッドを高階関数として使用できる機能を追加。
  • コンパイラが自動的にラッパー関数を生成する。

修飾メソッド

  • Classname/methodClassname/.methodClassname/new 構文を使用して、修飾メソッドを値として使用できる。

:param-tags メタデータ

  • 修飾メソッドに :param-tags メタデータを提供することで、オーバーロードされたメソッドを解決できる。

配列クラス構文

  • 配列クラスを表す構文を追加。例: String/2 は 2 次元文字列配列を表す。

関数型インターフェース

  • Java 関数型インターフェースを Clojure 関数に変換して使用できる。

Java Supplier 相互運用性

  • IDeref 実装体が теперь Supplier インターフェースを直接実装する。

ストリームサポート

  • stream-seq!stream-reduce!stream-transduce!stream-into! 関数により、ストリームを Clojure 方式で処理できる。

PersistentVector の Spliterable 実装

  • PersistentVector は теперь 並列処理をサポートするカスタムスプリッテレータを提供する。

効率的な drop と partition

  • dropnthrestnthnext 関数の性能が向上。
  • 新しい関数 partitionvpartitionv-allsplitv-at を追加。

Var の intern ポリシー

  • 名前空間で var を intern する際に安定した参照を生成する。
  • 1.11.0 で発生した問題を解決。

GN⁺のまとめ

  • Clojure 1.12.0 は Java 8 を使用する最後のリリースであり、今後のリリースは新しい Java LTS リリースへ移行する予定である。
  • 新機能として、ライブラリの対話的追加、外部プロセス制御、メソッド値の使用などがある。
  • Java との相互運用性が大幅に向上し、効率的な drop と partition 機能が追加された。
  • Clojure ユーザーにとって有用なアップデートであり、開発生産性を高められる。

1件のコメント

 
GN⁺ 2024-09-06
Hacker Newsのコメント
  • RichのYouTube講義を見て、Clojureに興味を持つようになった。会社に導入する方法を考えている
    • シンプルさについての教訓は非常に重要だと思う
  • 今回のリリースには、多くの素晴らしい新機能が含まれている
    • 個人的には add-libs 機能がいちばん気に入っている
    • 単一ファイルのデモや最小限のサンプルを書けるので、共有しやすくなる
    • Javaライブラリをデモするときにも便利だ
  • Clojure/conj 2024まで待つことになると思っていた
    • spec2 を待っているが、今はMalliを使っている
    • 関数インターフェースの変更によって、ユーティリティマクロを維持する必要がなくなった
  • 多くの新機能が追加されたが、コードはそのまま動く
  • add-libssync-deps 機能はとても有用だ
    • 今回のリリースは、以前のリリースとはスコープが異なる
  • spec の現状について気になっているという意見がある
  • ClojureはLispとJavaのエコシステムを組み合わせており、バックエンドシステムの構築に向いている
    • Java 8以降の革新を一部取り込んでいない点は惜しい
  • 関数インターフェースの変更は非常に重要だ
    • Javaとの相互運用性を維持していることが、Clojureの強みだ
  • 素晴らしい改善がたくさんある
    • 主に使っているLisp系言語だ
  • Clojureが今もなお力強く維持されていてうれしい