From a5a04dc11a69418611328e765dbe8498fa33571e Mon Sep 17 00:00:00 2001 From: Peter Taoussanis Date: Wed, 13 Apr 2016 19:25:33 +0700 Subject: [PATCH] v2.12.0-SNAPSHOT --- CHANGELOG.md | 21 +++++++++++++++++++++ benchmarks.png | Bin 17199 -> 20896 bytes project.clj | 2 +- src/taoensso/nippy/benchmarks.clj | 18 +++++++++--------- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6abc44..9208e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ > This project uses [Break Versioning](https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md) as of **Aug 16, 2014**. +## v2.12.0-SNAPSHOT / ... + +```clojure +[com.taoensso/nippy "2.12.0-SNAPSHOT"] +``` + +> This is a **major release** that **may** involve some **breaking API changes** in rare cases for users of some low-level or obscure features that have been made private or removed. If your code compiles with this new version of Nippy, you should be fine. + +> As with all Nippy releases: this version can read data written by older versions but older versions may not be able to read data written by _this_ version. + +* **BREAKING**: dropped support for `*final-freeze-fallback*` (rarely used) +* **BREAKING**: dropped support for `*default-freeze-compressor-selector*` (rarely used) +* **BREAKING**: made several implementation details private, incl. most low-level `write-` and `read-` fns (rarely used) +* **Performance**: several significant speed + space efficiency improvements, including more variable-sized types +* **New built-in types** (these previously fell back to the reader): regex patterns, symbols +* **New experimental caching feature** (please see `cache` docstring for details) +* **New**: `fast-freeze`, `fast-thaw` utils (please see docstrings for details) +* **Change**: `freeze` return val is no longer auto type hinted as `^bytes` (had a performance cost, rarely used) + +**PLEASE REPORT ANY PROBLEMS**, thank you! + ## v2.11.1 / 2016 Feb 25 > **Hotfix** for broken Clojure 1.5 support diff --git a/benchmarks.png b/benchmarks.png index 9cd79829fb718923df996fd05742fc756401e9fa..af745589e280a3c087b253ee11637cad47b2767c 100644 GIT binary patch literal 20896 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 LoWqo!c8vG~jk84F literal 17199 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" :description "High-performance serialization library for Clojure" :url "https://github.com/ptaoussanis/nippy" diff --git a/src/taoensso/nippy/benchmarks.clj b/src/taoensso/nippy/benchmarks.clj index aaa70be..698b4ef 100644 --- a/src/taoensso/nippy/benchmarks.clj +++ b/src/taoensso/nippy/benchmarks.clj @@ -62,15 +62,15 @@ ;; (bench {:reader? true :lzma2? true :fressian? true :laps 2}) ;; (bench {:laps 2}) - ;;; 2016 Apr 13, v2.12.0-SNAPSHOT, refactor + larger data + new hardware - {:reader {:round 52105, :freeze 17678, :thaw 34427, :size 27831}} - {:lzma2 {:round 43436, :freeze 28518, :thaw 14918, :size 11272}} - {:fressian {:round 6875, :freeze 5035, :thaw 1840, :size 17105}} - {:encrypted {:round 4718, :freeze 2872, :thaw 1846, :size 16420}} - {:default {:round 4250, :freeze 2547, :thaw 1703, :size 16400}} - {:fast1 {:round 3777, :freeze 2118, :thaw 1659, :size 17070}} - {:fast2 {:round 3753, :freeze 2119, :thaw 1634, :size 17066}} - ;; 12.26 + ;;; 2016 Apr 14, v2.12.0-SNAPSHOT, refactor + larger data + new hardware + {:reader {:round 52380, :freeze 17817, :thaw 34563, :size 27861}} + {:lzma2 {:round 43321, :freeze 28312, :thaw 15009, :size 11260}} + {:fressian {:round 6911, :freeze 5109, :thaw 1802, :size 17105}} + {:encrypted {:round 4726, :freeze 2951, :thaw 1775, :size 16308}} + {:default {:round 4299, :freeze 2655, :thaw 1644, :size 16278}} + {:fast {:round 3739, :freeze 2159, :thaw 1580, :size 17069}} + ;; 12.184228890439638 :default + ;; 14.009093340465364 :fast ;;; 2015 Oct 6, v2.11.0-alpha4 {:reader {:round 73409, :freeze 21823, :thaw 51586, :size 27672}}