{:aliases
{:clj/next
{:override-deps
{org.clojure/clojure {:mvn/version "1.10.0-alpha5"}}}}}
公式変更ログは、主要な安定版バージョン間の差分を追跡しています。このページには、開発中の暫定的な開発リリースに関するお知らせを集めています。
アルファ版 - 開発中の新機能と機能強化
ベータ版 - バグ修正のみで、新機能の開発は想定されていません
RC版 - リリース候補版。重大な問題が見つからない限り、最終リリースとして公開されます
注記:すべての開発リリースは、前回のリリース以降の新機能による破壊的変更の可能性があります。
CVE-2024-22871の修正(GHSA-vr64-r9qj-h27fに詳細が記載されています)
CLJ-2839 - `iterate`、`cycle`、`repeat` - 無限シーケンスのhashCode()が無限になります
機能
機能強化
CLJ-2777 - `clojure.java.process/start` - 親環境から環境変数をクリアする` :clear-env`オプションを追加します
CLJ-2828 - `clojure.java.process/capture` - 削除されました。代わりに`slurp`を使用してください。
CLJ-1162 - `deref` - 非IDRefで呼び出された場合のエラーメッセージを改善します
CLJ-2225 - `assert`と`**assert**` - 文脈を追加するためにdocstringsを改善します
CLJ-2290 - `into` - 0引数と1引数をdocstringに追加します
CLJ-2552 - `reify` - docstringを改善し、例を修正します
CLJ-2640 - `ex-info` - nilのデータマップを処理できるようになりました
CLJ-2783 - 非推奨のURLコンストラクタへの呼び出しを置き換えます
バグ修正
CLJ-2804 lazy-seq、delay - 同期ブロック内でユーザーコードを実行しないように、synchronizedをReentrantLockに置き換えました
バグ修正
以前の1.12.0アルファリリースでの作業からの修正
CLJ-2772 drop、nthrest、nthnext - nが正の整数ではない場合の動作の回帰を修正しました
CLJ-2741 drop - StringSeqに対して不適切に保持されていたメタデータを修正しました
CLJ-2767 add-libs - REPLチェックが常に使用を許可する問題を修正しました
CLJ-2769 add-libs - stdinを使用することで行制限の問題を修正しました
CLJ-2773 c.j.process/[from,to]-file - パラメータとdocstringの不一致を修正しました
CLJ-2776 c.j.process/exec - redirectErrorStreamの誤った使用を修正しました
CLJ-2774 c.j.process/exec - 上書きを許可するためにオプションのマージ順序を修正しました
CLJ-2778 c.j.process/capture - docstringのタイプミスを修正しました
CLJ-2779 c.j.process/start - デフォルトでカバーされている検証チェックを削除しました
CLJ-2521 別のバグ(CLJ-2743)が見られるため、alpha2からのこの修正を元に戻しました。これらはまとめて再検討します。
新機能
1.12.0-alpha1での修正
バグ修正と機能強化
CLJ-2521 コンパイラ - try/loop/tryをネストした場合の無効なクラスを修正しました
CLJ-2739 ArityException - 関数が20個以上の引数で誤って呼び出された場合のメッセージを修正しました
CLJ-2726 #uuidデータリーダー - 無効な入力に対する例外を修正し、リーダーを通して流れるようにしました
CLJ-2709 range - int引数に対して最適化されたrangeを使用します
CLJ-2721 range - 最適化されていないrangeにメタを追加する場合の無効な引数順序を修正しました
CLJ-2683 with-open - 展開時に.closeメソッドを修飾しないように修正しました
CLJ-2724 clojure.java.io/do-copy - 不正確な型ヒントを修正しました
CVE-2024-22871の修正(GHSA-vr64-r9qj-h27fに詳細が記載されています)
CLJ-2839 - `iterate`、`cycle`、`repeat` - 無限シーケンスのhashCode()が無限になります
CLJ-2701 バイナリシリアライゼーションを維持するために、KeywordとArraySeqのserialVersionUIDを1.10.3の値に戻します
CLJ-2690 `iteration`のdocstringと引数名を改善します
CLJ-2689 浮動小数点比較に対してより寛容になるようにclojure.mathのテストを修正します
CLJ-2685 `iteration`の生成テストの失敗を修正します
CLJ-2529 `Compiler.load()`による呼び出しで、ランタイムエラーがコンパイラエラーとして誤って報告される問題を修正します
CLJ-2620 preplで`:exception` `:val`の非対称な処理を修正します
CLJ-1180 `defprotocol`でのクラス型ヒントの解決を修正します
CLJ-1973 生成されたクラスで出力されるプロトコルメソッドの順序を再現可能にします
CLJ-2493の変更をロールバックしました
CLJ-2493 clojure.java.browse - xdg-openへの呼び出しで`browse-url`がハングする問題を修正します(新しい変更はよりターゲットを絞っており、より多くのケースに対応しています)
CLJ-2673 `abs`を追加し、`min`と`max`を可能な限りMathの実装を使用するように更新します
CLJ-2555 `iteration`ジェネレータ関数を追加します
CLJ-2621 インスタンスメソッド式に対するステートメントコンテキストで、使用されていない戻り値の不要なボクシングを修正します
CLJ-2663 無限シーケンスで呼び出されたときのベクトルの`=`が終了しない問題を修正します
CLJ-2679 シンボルに対する`case`式でのハッシュ衝突を修正します
CLJ-2670 パフォーマンスのために、チェックされたlong算術演算にMath.exact…メソッドを使用します
CLJ-2680 一致する型ヒントを持つプリミティブなローカルに型ヒントを付与してもエラーにならないように修正します
CLJ-2234 グローバル階層のみを使用するマルチメソッドプリファレンスを修正します
CLJ-2556 `into`の完了を修正し、`halt-when`が機能するようにします
CLJ-2665 `:as`と`:as-alias`を使用してrequireがロードされるように修正します
CLJ-2677 clojure.math - 本体とインラインでのメソッドリフレクションを修正し、docstringsを修正し、名前を変更しました
CLJ-1379 clojure.test - `:pass`マップでの`:actual`形式の引用を修正します
CLJ-2493 clojure.java.browse - xdg-openへの呼び出しで`browse-url`がハングする問題を修正します
CLJ-2611 clojure.xml - デフォルトでXXE展開の処理を停止します
CLJ-2684 contribの依存関係を最新版に更新します(spec.alpha、test.check、test.generative)
CLJ-2667 文字列から単一のlong/double/uuid/booleanをパースする関数の追加
CLJ-2668 NaN?とinfinite?述語の追加
CLJ-1925 random-uuidの追加
CLJ-2664 clojure.java.math名前空間、java.lang.Mathのラッパーの追加
CLJ-2666 Clojure Java APIのJavadocテキストを例と一致させる
CLJ-1360 末尾の空の部分に関するclojure.string/splitのdocstringの更新
CLJ-2249 集合、文字列、配列、ILookupに関するclojure.core/getのdocstringの明確化
CLJ-2488 reifyのdocstringへの定義の追加
CLJ-1808 map-invertはreduce-kvとtransientを使用する必要がある
CLJ-2065 SubVectorでのIKVReduceのサポート
depをspec.alpha (0.3.214)に更新
CLJ-2123 requireに:asと同様に動作するがロードしない:as-aliasオプションを追加
CLJ-1959 update-keysの実装を追加
CLJ-2651 update-valsの実装を追加
CLJ-1908 単一テストをフィクスチャ付きで実行し、レポートするclojure.test api run-testとrun-test-varを追加
CLJ-1879 IKVReduce - 古い遅いパス(IPersistentMap)を高速化し、Objectに拡張し、完全に列挙可能な型の集合から分離する
CLJ-2600 delayのrealized?を保留中の結果でブロックしない
CLJ-2649 3つの述語の場合のsome-fnとevery-predのチェック順序を、他の展開と一致するように修正する
CLJ-2636 *clojure-version*を定義する際に、java.util.Propertiesでのリフレクションを削除する
CLJ-2350 キーワードのarity例外メッセージを改善する
CLJ-2444 test-vars docstringのタイプミスを修正する
CLJ-1509 より多くのClojure名前空間をAOTコンパイルする
CLJ-2387 ソケットサーバーポート検証におけるオフバイワンエラーを修正する
depをcore.specs.alpha (0.2.62)に更新
CLJ-2504 clojure.mainでのエラーレポートにさらに多くのオプションを提供する
CLJ-2454 - 一致する反射呼び出しの呼び出しからのIllegalAccessExceptionを修正する
CLJ-2449 - serialized-requireをプライベートにする
CLJ-2435 - コンパイルおよびマクロ展開エラーに根本原因のクラス名を含める
1.10.0-beta6での変更
1.10.0-beta5に追加されたメタデータプロトコル拡張は、プロトコルが定義されるときに、:extend-via-metadataを使用してオプトインが必要になりました。
clojure.reflectの下のJavaReflectorはデータ化されました。
CLJ-2432 - `resolve`に似ていますが、必要に応じてシンボルの名前空間をrequireするclojure.core/requiring-resolveを追加しました。
CLJ-2427 - 例外文字列を作成中に二次例外が発生する可能性のあるCompilerException.toString()のバグを修正し、元の例外を隠蔽していました。
CLJ-2430 - エラーフェーズ、ex-triageに関する作業を続け、preplが新しいエラーレポートインフラストラクチャをより適切に利用できるようにする
1.10.0-beta5での変更
以前の拡張方法に加えて、値は、キーがプロトコル関数の完全修飾シンボルであり、値が関数実装であるメタデータを追加することで、プロトコルを拡張できるようになりました。プロトコルの実装は、まず直接定義(defrecord、deftype、reify)、次にメタデータ定義、次に外部拡張(extend、extend-type、extend-protocol)で確認されます。datafyは、このメカニズムを使用するように更新されました。
対応するシンボルを取得するために、`symbol`にvarまたはキーワードを渡せるようになりました。
CLJ-2420 - エラーレポートの強化 - より洗練されたフェーズレポート、clojure.main/ex-strから分割された新しいclojure.main/ex-triage、実行エラーはスタックトレースの上位**ユーザー**行を報告し、コアからのフレームを省略し、フォームのメタデータを使用してファイルと行を提供するための強化
CLJ-2425 Java 11 Javadoc URLを追加
1.10.0-beta4には、1.10.0-beta3以降の変更が含まれています。
CLJ-2417 sortとsort-byはメタデータを保持する必要があります
1.10.0-beta3には、1.10.0-RC1以降の変更が含まれています。
datafy - データ化されたクラスと名前空間に:nameを追加し、データ化されたすべての場合のメタデータに:classを追加する
CLJ-1079 - リーダーは、リストとシーケンスの:line :columnメタデータを上書きするのではなく、保持する必要があります。また、clojure.mainは:fileメタデータに基づいて*file*をバインドします。
1.10.0-alpha9 は、1.10.0-alpha8 以降の以下の変更を含みます。
CLJ-2374 - JDK 11での反射の曖昧さを解決するために型ヒントを追加しました。
CLJ-1209 - `clojure.test` のエラーレポートに `ex-data` を出力します。
CLJ-1120 - 移植可能なエラー処理のために、CLJS と同様に `ex-cause` と `ex-message` を追加しました。
CLJ-2385 - tap-loop スレッドの開始を遅らせました(Graal Native Image の問題に対処します)。
CLJ-2407 - 単体テストのエラーを修正しました。
CLJ-2066 - Java 9+ の `--illegal-access` 警告に対する反射によるフォールバックを追加しました。
CLJ-2375 - 非推奨の JDK API の使用を修正しました。
CLJ-2358 - `read+string` の無効なアリティを修正しました。
1.10.0-alpha8 は、1.10.0-alpha7 以降の以下の変更を含みます。
CLJ-2297 - `without` でキーが削除されると `PersistentHashMap` がメモリリークします。
CLJ-1587 - `PersistentArrayMap` の `assoc` は `HASHTABLE_THRESHOLD` を尊重しません。
CLJ-2050 - `HashCollisionNode` で冗長なキー比較を削除しました。
CLJ-2349 - `clojure.test` で未処理の `ExceptionInfo` の正しい行番号を報告します。
CLJ-1403 - `ns-resolve` は `ClassNotFoundException` をスローする可能性がありますが、`nil` を返す必要があります。
CLJ-1654 - `some` でシーケンスを再利用します。
CLJ-1764 - 無限パーティションの1つの要素にアクセスすると、`partition-by` が無限ループを実行します。
CLJ-2044 - `clojure.instant` の関数に `arglist` メタデータを追加しました。
CLJ-1797 - `require` が失敗した場合、エラーに `cljc` を記載します。
CLJ-1832 - `unchecked-*` 関数は、プリミティブな long と boxed Long で異なる動作をします。
CLJ-1366 - 空のマップリテラルは、毎回異なるマップとして読み取られます。
CLJ-1550 - `deftype` と `defrecord` で生成されたクラスは、`.getPackage` とうまく連携しません。
CLJ-2031 - `clojure.walk/postwalk` は `MapEntry` 型オブジェクトを保持しません。
CLJ-1435 - `'numerator` と `'denominator` は、整数値(例:N/1)を処理できません。
CLJ-2257 - ドックストリング:`proxy` のタイプミスを修正しました。
CLJ-2332 - ドックストリング:`remove-tap` の繰り返しを修正しました。
CLJ-2122 - ドックストリング:`flatten` の結果を遅延処理として説明しました。
Clojure 1.10.0-alpha7 が利用可能になりました。
1.10.0-alpha7 は、1.10.0-alpha6 以降の以下の変更を含みます。
依存関係を最新の spec.alpha (0.2.176) と core.specs.alpha (0.2.44) に更新しました。
CLJ-2373 - REPL での例外メッセージの出力の分類と見直しを行いました。
CLJ-1279 - マクロ内の関数アリティエラーの正しいアリティ数を報告します。
CLJ-2386 - `ex-info` の構築スタックフレームを省略します。
CLJ-2394 - 構文エラーのスタックトレースが実行前に失敗したことを pst で警告します。
CLJ-2396 - デフォルトの説明プリンターを使用している場合、spec 関数のエラーを出力するときに `:in` 節を省略します。
Clojure 1.10.0-alpha6 が利用可能になりました。
1.10.0-alpha6 は、1.10.0-alpha5 以降の以下の変更を含みます。
CLJ-2367 - ASM の回帰修正を取り込み、ケーステストを追加しました - パッチを提供してくれた Sean Corfield 氏、および追跡に協力してくれた Daniel Sutton 氏と Ghadi Shayban 氏に感謝します。
Clojure 1.10.0-alpha5 が利用可能になりました。
1.10.0-alpha5 は、1.10.0-alpha4 以降の以下の変更を含みます。
CLJ-2363 - Clojure の最小要件を Java 8 に変更しました(埋め込み ASM も最新版に更新しました) - Ghadi Shayban 氏に感謝します!
CLJ-2284 - Java 9+ での静的インターフェースメソッド呼び出しに対する無効なバイトコード生成を修正しました - Ghadi Shayban 氏に感謝します!
CLJ-2330 - シリアライゼーションのずれにより Java 10 ビルドで失敗する壊れやすいテストを修正しました。
CLJ-2362 - 新しいメタデータが以前のものと同一の場合、`withMeta()` は同一性を返す必要があります。
CLJ-1130 - 静的メソッドと一致できない場合、エラーメッセージを改善しました。
CLJ-2089 - デフォルトのコンパレーターを使用したソート済みコレクションは、最初の要素が Comparable であることを確認しません。
CLJ-2163 - var のシリアライゼーションのテストを追加しました。
spec.alpha の依存関係のバージョンを最新版の 0.2.168 に更新しました(変更点を参照)。
core.specs.alpha の依存関係のバージョンを最新版の 0.2.36 に更新しました(変更点を参照)。
1.10.0-alpha5 は、Java 6 と 7 のサポートを廃止し、Java 8 を最小要件としました。コンパイルは Java 8 レベルのバイトコードを生成します(以前のバージョンの Java では実行できません)。このリリースをライブラリまたはプロジェクトで試して、エラー、パフォーマンスの違い(良いか悪いか)、互換性などに関するフィードバックを提供いただけると幸いです。 |
`clj` ツールと deps.edn を使用する場合、`~/.clojure/deps.edn` にエイリアスを追加することをお勧めします。
{:aliases
{:clj/next
{:override-deps
{org.clojure/clojure {:mvn/version "1.10.0-alpha5"}}}}}
その後、`clj` でエイリアスをアクティブ化することで、最新の Clojure 開発リリースを使用して任意のプロジェクトを実行できます。
clj -A:clj/next
CLJ-2313 - 文字列キャプチャモードの修正
依存関係を含む実行可能な Clojure jar(および test.check)をビルドするための新しい Maven プロファイルと Ant ターゲットがビルドに追加されました。これは、Clojure 自体の開発や、リポジトリのクローン作成と簡単なビルドによる実行可能ファイルの取得に役立ちます。
ローカル jar の作成と実行方法に関する情報を含むように、readme.txt が更新されました。
リリースの一部として、clojure-VERSION.zip ファイルの公開を停止しました。
1.9.0-beta4 と同じです。
CLJ-2259 - 1.9 で追加された不要な `bigdec?` 述語を削除しました。
spec.alpha の依存関係を 0.1.143 に更新しました。
CLJ-2254 - マクロでの spec チェックをオフにするために使用できるシステムプロパティ `clojure.spec.skip-macros` (デフォルト = false) を追加しました。
1.9.0-beta2 は、1.9.0-beta1 以降の以下の変更を含みます。
1.9.0-beta1 は、1.9.0-alpha20 以降の以下の変更を含みます。
CLJ-2077 - Java 9 では、ブートクラスパスから Clojure をロードできません。
1.9.0-alpha20 は、1.9.0-alpha19 以降の以下の変更を含みます。
CLJ-1074 - (新規) 記号値のための新しい `##` リーダーマクロを追加し、`##Inf`、`##-Inf`、`##NaN` の double 値に対する読み取り/出力サポートを追加しました。
CLJ-1454 - (新規) 古い値と新しい値の両方を返す `swap-vals!` と `reset-vals!` を追加しました。
CLJ-2184 - (エラー) エラーレポートを改善するために、`doto` フォームでメタデータを伝播します。
CLJ-2210 - (パフォーマンス) コンパイラの性能を向上させるために、コンパイラでクラスの導出をキャッシュします。
CLJ-2070 - (パフォーマンス) `clojure.core/delay` - パフォーマンスを向上させました。
CLJ-1917 - (パフォーマンス) 文字列に対するシーケンスの削減は、ループの外で `String/length` を呼び出す必要があります。
CLJ-1901 - (パフォーマンス) `amap` - `alength` を一度だけ呼び出す必要があります。
CLJ-99 - (パフォーマンス) `min-key` と `max-key` - 各引数に対して k を最大で一度評価します。
CLJ-2188 - (パフォーマンス) `slurp` - 戻り値の型を String としてマークします。
CLJ-2108 - (起動時間) specおよびコアspecの遅延読み込み (これに関する作業はまだあります)
CLJ-2204 - (セキュリティ) プロキシクラスのシリアル化を無効化して、逆シリアル化時の潜在的な問題を回避します
CLJ-2048 - (修正) JVMによってスタックトレースが省略された場合にClassCastExceptionを回避するために型を指定します
CLJ-1887 - (修正) IPersistentVector.length() - 欠落しているメソッドを実装します
CLJ-1841 - (修正) bean - イテレータが壊れていました
CLJ-1714 - (修正) 型ヒントでクラスを使用しても、そのクラスは読み込まれません
CLJ-1398 - (修正) clojure.java.javadoc/javadoc - ドキュメントのURLを更新します
CLJ-1371 - (修正) Numbers.divide(Object, Object) - NaNのチェックを追加します
CLJ-1358 - (修正) ドキュメント - 特殊なケース(try、catch)を正しく展開しません
CLJ-1705 - (修正) vector-of - 認識されない型が指定された場合のNullPointerExceptionを修正します
CLJ-2170 - (ドキュメント) 不正な位置にあるdocstringsを修正します
CLJ-2156 - (ドキュメント) clojure.java.io/copy - doc char[]サポート
CLJ-2051 - (ドキュメント) clojure.instant/validated docstring - タイプミスを修正
CLJ-2104 - (ドキュメント) clojure.pprint docstring - タイプミスを修正
CLJ-2028 - (ドキュメント) filter、filterv、remove、take-while - docstringsを修正します
CLJ-1873 - (ドキュメント) require、*data-readers*
- docstringsに.cljcファイルを追加します
CLJ-1159 - (ドキュメント) clojure.java.io/delete-file - docstringを改善します
CLJ-2039 - (ドキュメント) deftype - docstringのタイプミスを修正します
CLJ-1918 - (ドキュメント) await - shutdown-agentsに関するdocstringを改善します
CLJ-1837 - (ドキュメント) index-of、last-index-of - docstringsを明確化します
CLJ-1826 - (ドキュメント) drop-last - docstringを修正します
CLJ-1859 - (ドキュメント) zero?、pos?、neg? - docstringsを修正します
RTでデフォルトのインポートセットを公開します
*reader-resolver*
をLispReader$Resolverの実装にバインドして、自動解決されたキーワードとマップを解決する際の、リーダーによる名前空間の相互作用の使用を制御できるようになりました。
当初の意図どおり、自動解決されたキーワードと自動解決された名前空間マップ構文を厳格化して、**エイリアスのみ**をサポートします
core.specs.alpha 0.1.24を使用するように更新しました
1.9.0-alpha16には、1.9.0-alpha15以降の変更が含まれています
名前空間clojure.spec、clojure.spec.gen、clojure.spec.testは、Clojureが依存関係を介して含める外部ライブラリspec.alphaに移動されました
これらの名前空間は変更され、 ".alpha" が追加されました: clojure.spec.alpha、clojure.spec.gen.alpha、clojure.spec.test.alpha
clojure.spec内のすべてのキーワード定数(:clojure.spec/invalidなど)は、同じ名前空間の変更に従います(現在は:clojure.spec.alpha/invalid)
アサーションに関連するspec関連のシステムプロパティは変更されませんでした
名前空間clojure.core.specs内のclojure.core自体のspecは、Clojureが現在依存している外部ライブラリcore.specs.alphaに移動されました
clojure.core.specs名前空間はclojure.core.specs.alphaに変更されました。その名前空間内のすべての修飾されたspec名は、同じ名前空間の変更に従います(ほとんどの人はこれらを直接使用していませんでした)
ほとんどの場合、Clojure 1.9.0-alphaXの使用方法をClojure 1.9.0-alpha16に更新するには、
Clojureの依存関係を[org.clojure/clojure "1.9.0-alpha16"]に更新します - これにより、追加の2つのダウンストリームライブラリが自動的にプルされます
specを宣言または使用する名前空間の名前空間宣言を変更します
(:require [clojure.spec.alpha :as s]
[clojure.spec.gen.alpha :as gen]
[clojure.spec.test.alpha :as stest])
specをClojureのリポジトリ/アーティファクトからライブラリに移動して、Clojureとは別にspecを進化させやすくします。specをClojure 1.9の重要な部分と考えていますが、最終決定する前に解決する必要がある設計上の懸念事項がいくつかあります。これにより、specのアルファ版に依存するプロダクションClojureリリース(1.9)に向けて進むことができます。ユーザーは、必要に応じて、新しいバージョンのspecアルファライブラリを選択することもできます。さらに、これはClojure内で依存関係を活用するためのサポートを強化するための最初のステップです。
次の(名前が変更された)名前空間を含む2つの新しいcontribライブラリを作成します
org.clojure/spec.alpha clojure.spec.alpha (previously clojure.spec) clojure.spec.gen.alpha (previously clojure.spec.gen) clojure.spec.test.alpha (previously clojure.spec.test) org.clojure/core.specs.alpha clojure.core.specs.alpha (previously clojure.core.specs)
ほとんどの場合、ユーザーはspec名前空間への参照にエイリアスを付けており、変更された名前空間に更新するには、requireの時点で1つの変更のみが必要になります。
ClojureScriptのspec実装はどのように変更されますか?
ClojureScriptも、Clojureに一致する名前空間名を変更します。最終的には、ClojureScriptの実装はClojureScriptからspec.alphaライブラリに移動される可能性があります-これはまだ議論中です。
ライブラリと名前空間がalphaで終わるのはなぜですか?
"alpha"は、specのAPIと実装がまだ変更される可能性があることを示しています。
spec apiがalphaではなくなった場合はどうなりますか?
その時点で、specライブラリの非アルファバージョン(非アルファの名前空間付き)をリリースする予定です。ユーザーは、依存するClojureのバージョンとともに、そのバージョンのspecをすぐに使用できます。Clojure自体は、後でそれに依存するようになります。これらのアクションのタイミングは未定です。
ライブラリはClojure 1.8またはそれ以前のバージョンをサポートしますか?
いいえ。specはClojure 1.9の新しい関数を使用しており、古いバージョンでspecを提供することは目標ではありませんでした。むしろ、安定したClojure 1.9のリリースを迅速化して、ユーザーがspecのアルファバージョンにアクセスできる安定したプロダクションリリースにマイグレーションし、利用可能になり次第、継続的に更新されたバージョンにアクセスできるようにしようとしています。
1.9.0-alpha15には、1.9.0-alpha14以降の変更が含まれています
Specs
インフラストラクチャ
CLJ-2113 - Clojure Mavenビルドが更新されました
1.9.0-alpha14には、1.9.0-alpha13以降の変更が含まれています
新規 into
は、0引数([]を返す)と1引数(渡されたcollを返す)を持つようになりました
新規 halt-when
は、predが満たされたときに変換を終了するトランスデューサです。完了した結果と述語をトリガーした入力を使用して呼び出されるオプションのfnを受け入れます。
CLJ-2042 - clojure.spec/form of clojure.spec/?は、predを解決するようになりました
CLJ-2024 - clojure.spec.test/checkは、エイリアスの付いたfspecを完全に解決するようになりました
CLJ-2032 - fspecに:args specがない場合の混乱するエラーを修正しました
CLJ-2027 - bean
インスタンスの印刷に関する1.9の回帰を修正しました
CLJ-1790 - Java配列にプロトコルを拡張する際のエラーを修正しました
CLJ-1242 - 互換性のないコンパレータを持つソートされたセットまたはマップに対する=は、例外をスローするのではなくfalseを返すようになりました
1.9.0-alpha13には、1.9.0-alpha12以降の変更が含まれています
s/conform of nilableは、常にconformed値ではなく、渡された値を返していました
s/nilableは、10%の確率でnilを返すジェネレータを作成するようになりました(50%ではなく)
s/nilableは、述語specの実現を最初の使用まで遅らせるようになりました(再帰的なspecの作成に適しています)
clojure.spec.genは、clojure.test.check.generators/frequencyのdynloadバージョンを提供するようになりました
1.9.0-alpha12には、1.9.0-alpha11以降の変更が含まれています
多くのユースケースでspecのパフォーマンスが向上しました
spec explainプリンターは、explain-dataを受け取り*out*
に出力する関数である必要がある動的変数clojure.spec/*explain-out*
を介してプラグイン可能になりました
マクロ展開中にマクロspecが失敗した場合、IllegalArgumentExceptionではなく、explain-dataペイロードを含むex-infoをスローします
*print-namespace-maps*
がtrueの場合、pprintは名前空間リテラル構文を使用してマップを出力します
CLJ-1988 - coll-of、everyはシーケンスを正しく適合させるように拡張されました
CLJ-2004 - マルチspecフォームにretagがありませんでした
CLJ-2006 - docstring内の古い関数名を修正しました
CLJ-2008 - checkable-symsからマクロを省略します
CLJ-2012 - クラス名を許可するようにgen-classシグネチャのns specを修正しました
CLJ-1224 - レコードインスタンスは、マップのようにhasheqとhashCodeをキャッシュするようになりました
CLJ-1673 - clojure.repl/dir-fnは、名前空間エイリアスで動作するようになりました
1.9.0-alpha11には、1.9.0-alpha10以降の変更が含まれています
Clojureには、次のclojure.coreマクロのspecが含まれるようになりました。let、if-let、when-let、defn、defn-、fn、ns。マクロspecはマクロ展開中にチェックされるため、これらのマクロ内の無効な構文は、コンパイル時に失敗するようになりました。以前は、一部のエラーは実行時に検出され、一部はまったく検出されませんでした。
CLJ-1914 - 並行範囲の実装における競合状態を修正
CLJ-1870 - defmultiの再読み込み時にvarのメタデータが削除される問題を修正
CLJ-1744 - 使用されていないローカル変数をクリアし、場合によってはメモリリークを防ぐ
CLJ-1423 - 無限長の引数リストでvarを呼び出すことを許可(高速化も実現)
CLJ-1993 - キーが同じ名前空間からのマップに対して名前空間マップ構文を使用するかどうかを制御する*print-namespace-maps*
動的varを追加。デフォルトはfalseだが、標準REPLバインディングではtrueに設定される。
CLJ-1985 - with-genでコンフォーマーのunform関数が失われる問題を修正
clojure.spec.test/checkが、specで定義されたマクロをスキップするように修正
1.9.0-alpha8からの回帰、デストラクチャリング内の型ヒントが失われる問題を修正
clojure.spec/mergeのdocstringを修正し、mergeが適合済みの値を流さないことを明記
正規表現演算が、使用されている場合はgenのオーバーライドを使用するように修正
1.9.0-alpha10には、1.9.0-alpha9以降の以下の変更が含まれています。
新規 clojure.core/any? - 任意のものにマッチする述語。any?はビルトインのgenサポートを持つ。:clojure.spec/any specは削除された。さらに、some?にもgenサポートが追加された。
keys*がgenを生成するようになった。
genオーバーライド(c.s/gen、c.s./exercise、c.s.t/check、c.s.t/instrumentを参照)は、genではなく、genを返す引数なし関数を期待するようになった。
CLJ-1977 - スタックトレースが空の場合のThrowableのデータ変換におけるalpha9からの回帰を修正
1.9.0-alpha9には、1.9.0-alpha8以降の以下の変更が含まれています。
新規 clojure.spec/assert - コードにspecアサーションを追加するための機能。詳細は、*compile-asserts*
とassertのドキュメントを参照。
clojure.spec/merge - conform/unformにおいて、値を流すのではなくマージするようになった。
clojure.spec.test/instrumentは、:args specの失敗の原因となった呼び出し元を報告し、specで定義されたマクロを無視するようになった。
clojure.spec.test - test
、test-fn
、testable-syms
は、目的をより反映させるため、check
、check-fn
、checkable-syms
に名前が変更された。さらに、check
の戻り値構造の一部が改善された。
clojure.core/Throwable→mapは、以前はStackTraceElementsを返し、後でプリンターによって処理されていた。現在、StackTraceElementsはデータに変換されるため、戻り値は意図したとおり純粋なClojureデータとなる。
1.9.0-alpha8には、1.9.0-alpha7以降の以下の変更が含まれています。
コレクションspecのサポートが大幅に強化され、適合、生成、カウント、重複要素、コレクションの種類を制御するための新しいコントロールが追加された。詳細は、every、every-kv、coll-of、map-ofのドキュメントを参照。
インストルメンテーションとテストが合理化され、より構成可能になり、specとgenのオーバーライド、スタブ、モックのための強力な新機能が追加された。clojure.spec.testのinstrument、test、enumerate-ns、summarize-results関数のドキュメントを参照。
名前空間付きキーワードのリーダーフォーマット、印刷、デストラクチャリングが強化され、キーに対して名前空間を昇格させ、完全修飾キーワードのより簡潔な使用をサポートするようになった。更新されたドキュメントはまもなくclojure.orgに追加される。
キーspecのマージ、fnの実行、Java 1.8タイムスタンプ、bounded-countなど、多くのユーティリティが追加された。
変更ログ
clojure.spec
[変更] map-of - すべての値とオプションですべてのキーを適合させるようになり、追加のkind、count、genオプションを持つようになった。
[変更] coll-of - すべての要素を適合させるようになり、追加のkind、count、genオプションを持つようになった。init-collパラメータは不要になった。
[追加] every - サンプリングによってコレクションを検証し、多くの追加オプションを持つ。
[追加] every-kv - サンプリングによってマップを検証し、多くの追加オプションを持つ。
[追加] merge
[変更] genオーバーライドは、名前またはパスで指定できるようになった。
[変更] fspecジェネレーター - :ret specに従って戻り値を生成する関数を作成し、:fn specを無視する。
[追加] explain-out - explain-dataの結果からexplain出力文字列を生成する。
[変更] explain-data - 出力は、パスをキーとするマップではなく、:path要素を持つ問題のベクトルになった。
[追加] get-spec - キーワードまたはシンボルでレジストリからspecを検索する。
[削除] fn-spec - get-specを参照。
[追加] exercise-fn - specで定義された関数を与えると、生成された引数と戻り値を返す。
すべてのinstrument関数はclojure.spec.testに移動された。
clojure.spec.test
[変更] instrument - 以前はvarを取っていたが、現在はシンボル、名前空間シンボル、またはシンボルや名前空間のコレクションを取ることができ、スタブやモックのための多くの新しいオプションが追加された。詳細はdocstringを参照。
[削除] instrument-ns - instrumentを参照。
[削除] instrument-all - instrumentを参照。
[変更] unstrument - 以前はvarを取っていたが、現在はシンボル、名前空間シンボル、またはシンボルや名前空間のコレクションを取る。
[削除] unstrument-ns - unstrumentを参照。
[削除] unstrument-all - unstrumentを参照。
[追加] instrumentable-syms - インストルメントできるシンボル。
[追加] with-instrument-disabled - スコープ内の呼び出しのinstrumentによるチェックを無効にする。
[変更] check-varはtestに名前が変更され、シグネチャが変更された。ドキュメントを参照。
[変更] run-tests - testを参照。
[変更] run-all-tests - testを参照。
[変更] check-fnはtest-fnに名前が変更された。
[追加] abbrev-result - テストのより簡潔な説明を返す。
[追加] summarize-result - 多くのテストのサマリーを返す。
[追加] testable-syms - テストできるシンボル。
[追加] enumerate-namespace - 名前空間内のvarのシンボルを提供する。
clojure.core
[変更] - ClojureをJava 8で使用する場合、inst-msはjava.time.Instantインスタンスで動作するようになった。
[追加] bounded-count - collがcounted?であればそのカウントを返し、そうでなければそのseqを使用してcollの先頭n個の要素を最大限にカウントする。
1.9.0-alpha7には、1.9.0-alpha6以降の以下の変更が含まれています(alpha5/6と比較してすべて破壊的変更)。
clojure.core: - long? ⇒ int? - 現在はすべてのJava固定精度整数型(byte、short、integer、long)をチェックする - pos-long? ⇒ pos-int? - neg-long? ⇒ neg-int? - nat-long? ⇒ nat-int?
clojure.spec: - long-in-range? ⇒ int-in-range? - long-in ⇒ int-in
long?を具体的にチェックしたい場合は、#(instance? Long %)を使用してください。
変更をお詫びし、alphatownへようこそ!
1.9.0-alpha6には、1.9.0-alpha5以降の以下の変更が含まれています。
&正規表現演算子は、正規表現が通過しても述語が通過しない場合、高速に失敗するようになった。
alt/orからの戻り値は、2要素のベクトルではなく、マップエントリ(キー/値をサポート)になった。
[破壊的変更] fn-specsはfn-specに名前が変更され、登録されたfspecまたはnilを返すようになった。
fspecはfn?ではなくifn?を受け入れるようになった。
fspecの実装は、その:args、:ret、:fn specのキーワードルックアップをサポートする。
キーが不足していたfspec describeを修正し、:args/ret/fn specの説明を改善。
instrumentは、varの:args specのみをチェックするようになった - :retと:fn specをテストするには、clojure.spec.test関数を使用する。
alpha5で誤って省略されていたbytes?とuri?に対するジェネレーターサポートを追加。
1.9.0-alpha5には、1.9.0-alpha4以降の以下の変更が含まれています。
修正: - specが存在しない場合、docが"Spec"と印刷していた問題を修正 - ? explainを修正
コアにおける新しい述語(すべてspecでビルトインのジェネレーターサポートも持つようになった): - seqable? - boolean? - long?, pos-long?, neg-long?, nat-long? - double?, bigdec? - ident?, simple-ident?, qualified-ident? - simple-symbol?, qualified-symbol? - simple-keyword?, qualified-keyword? - bytes? (byte[]用) - indexed? - inst? (および新しいinst-ms) - uuid? - uri?
specの新機能: - unform - specと適合した値を与えると、適合前の値を返す - 新しい述語: long-in-range?, inst-in-range? - 新しいspec(genサポート付き): long-in, inst-in, double-in
1.9.0-alpha4には、1.9.0-alpha3以降の以下の変更が含まれています。
空のcatのdescribeを修正
update-inのパフォーマンスを向上
seq(&)デストラクチャリングを最適化
1.9.0-alpha3には、1.9.0-alpha2以降の以下の変更が含まれています。
マクロfdef specは、暗黙的な&formまたは&envをspec指定する必要がなくなった[破壊的変更]
multi-specは、パスにディスパッチ値を含めるようになった。
multi-specは、特別なデフォルトメソッドを必要としなくなった。
rep*のバグを修正
explain-strを追加(文字列を返すexplain)
s/+ explainを改善
explain出力を調整
テストレポートを修正
1.9.0-alpha2には、1.9.0-alpha1以降の以下の変更が含まれています。
s/+のdescribeを改善
gen呼び出し時にrecursion-limitをキャプチャ
explain-dataは、入力パスの:inキーを含むようになった。
CLJ-1931 - with-genがAbstractMethodErrorをスローする問題を修正
1.9.0-alpha1には、clojure.specの最初のリリースが含まれています。
specの使用ガイドは、https://clojure.dokyumento.jp/guides/specで確認できます。