ClojureScript

1.10.844 リリース

2021年4月6日
ClojureScriptチーム

ClojureScriptの新しいリリースを発表できることを嬉しく思います。ClojureScriptの既存ユーザーの方は、以下のリリースノートをよくお読みください。

注目すべき変更点と破壊的変更点

  • Closure Compilerがv20210302に更新されました。

  • Closure Libraryが0.0-20201211-3e6c510dに更新されました。

最新のClosure Libraryリリースには、コードに影響を与える可能性のある破壊的変更が含まれていることに注意してください。

  • goog.debug.Logger.Levelgoog.Logger.Levelに名前変更され、goog.log.Level/getLogger関数は追加の引数をとるようになりました。

  • 次のJavaScript型チェック述語が削除されました:goog/isStringgoog/isArraygoog/isFunctiongoog/isNumbergoog/isBoolean

  • Closure名前空間のロードロジックが改訂されたため、一部のREPLを更新する必要があります。

新しいコア機能

ライブラリプロパティ名前空間

JavaScriptオブジェクトとして公開されているJavaScriptライブラリを使用する場合、このオブジェクトのプロパティをClojureScriptのファーストクラス名前空間として指定できるようになりました。これを行うには、$デリミタを使用します。

たとえば、npm-libによって提供されるライブラリオブジェクトのSubLibプロパティは、次のように名前空間として扱うことができます。

(ns foo
  (:require [npm-lib$SubLib :as sub-lib :refer [...]]))

必要に応じて、文字列ベースのrequireも使用できます。

(ns foo
  (:require ["@npm/lib$SubLib" :as sub-lib :refer [...]]))

この機能は、defaultエクスポートへのアクセスにも使用できます。

(ns foo
  (:require [npm-lib$default :as npm-lib :refer [...]]))

$デリミタは最上位のオブジェクトプロパティへのアクセスにのみ必要です。ネストされたプロパティは、次の例のように.を使用してアクセスします。

(ns foo
  (:require [react-native$NativeModules.SomeBridge :as woz]))

注目すべき修正点

cljs.testにおける正確なファイル名と行番号

do-reportでコールスタックからファイル名と行番号を不正確に推論する代わりに、メタデータに基づいてマクロ展開中にそれらがキャプチャされるようになりました。

sortsort-byはメタデータを保持する

この簡単な変更により、sortsort-byがClojureと一貫性を持つようになりました。たとえば、以下は{:a true}と評価されます。

(meta (sort (with-meta (range 10) {:a true})))

rangeにおける浮動小数点の問題

rangeのいくつかの浮動小数点の問題に対処しました。たとえば、(range 0 (+ 1 (/ 9)) (/ 9))は10個の要素を持ち、(nth (range 0 1 0.1) 6)は正しく0.6と評価されるようになりました。

#instの解析と印刷は、プロレプティックグレゴリオ暦を反映する

JavaScriptはプロレプティックグレゴリオ暦を使用しており、ClojureScriptの#instサポートにおけるいくつかのバグが、非常に古い日付に関する解析と印刷に関して修正されました。

パフォーマンスの改善

マップのデストラクチャリングマクロによって生成されるコードの削減

kw-argsを処理する共有ヘルパーを導入することにより、マップのデストラクチャリングの実装に生成されるコードを最適化しました。これにより、Closureで最適化された出力の一部が35バイトから5バイトに削減され、マップのデストラクチャリングはコードで頻繁に使用されるため、大きな節約になります。

変更リスト

ClojureScript 1.10.844のすべての更新の完全なリストについては、変更ログを参照してください。

貢献者

ClojureScript 1.10.844に貢献してくれたコミュニティの皆様に感謝します。

  • Arne Brasseur

  • Erik Assum

  • Hyunwoo Nam

  • Matthew Huebert

  • Thomas Heller