Clojure Language Update (2015)
- 2. 数字で見るClojure 1.7
‣ 開発期間:2014/5/25∼ (2014/8/6 alpha1リリース)
‣ チケット数:116 /570
‣ コミット数:159 /2756
‣ コミッター:30人 /130
‣ コード行数
- *.java:58067行 (+3582, -1011)
- *.clj:32488行 (+2530, -1296)
数値は2015/6/25現在のもの
- 3. Clojure 1.7 変更点 概観
‣ Transducers (詳細は@athos0220の発表)
対象となるデータ構造に依存しない、各要素の変換アルゴリズムの記述方法
‣ Reader Conditionals (詳細は@_ayato_pさんの発表)
Clojure/ClojureScript/ClojureCLR間での相互運用性向上のための仕組み
‣ その他新機能
‣ パフォーマンス向上
‣ 機能向上
変更点の詳細・一覧についてはChangeLogを参照のこと
- 6. run!関数
‣ (run! proc s) = (reduce #(proc %2) nil s)
‣ シーケンスの各要素に副作用を起こすときに便利
user=> (run! println (range 3))
0
1
2
nil
user=>
- 15. 関数名のマングリングルール修正
‣ 関数に対応するクラスを生成する際の、マングリング
された名前が衝突するのを修正
code before after
(defn a []) user$a user$a
(fn []) user$evalN$fn__N user$evalN$fn__N
(fn a []) user$evalN$a__N user$evalN$a__N
(let [a (fn [])] a) user$evalN$a__N user$evalN$a__N
(let [a (fn x [])] a) user$evalN$x__N user$evalN$a_x_N
(def a (fn [])) user$a user$a
(def a (fn x [])) user$x user$a_x_N
(def ^{:foo (fn [])} a) user$fn__N user$fn__N
(def ^{:foo (fn a [])} a) user$a user$a__N
(def a (fn [] (fn []))) user$a$fn__N user$a$fn__N
(def a (fn [] (fn x []))) user$a$x__N user$a$x__N