specter/CHANGES.md

135 lines
8.4 KiB
Markdown
Raw Normal View History

2016-06-07 22:18:44 +00:00
## 0.12.0 (unreleased)
2016-06-08 00:25:39 +00:00
* BREAKING CHANGE: Changed semantics of `Navigator` protocol `select*` in order to enable very large performance improvements to `select`, `select-one`, `select-first`, and `select-one!`. Custom navigators will need to be updated to comform to the new required semantics. Codebases that do not use custom navigators do not require any changes. See the docstring on the protocol for the details.
* Added `select-any` operation which selects a single element navigated to by the path. Which element returned is undefined. If no elements are navigated to, returns `com.rpl.specter/NONE`. This is the fastest selection operation.
2016-06-07 22:18:44 +00:00
* Added `selected-any?` operation that returns true if any element is navigated to.
* Huge performance improvements to `select`, `select-one`, `select-first`, and `select-one!`
2016-06-08 17:35:29 +00:00
* Added META navigator (thanks @aengelberg)
2016-06-09 12:06:52 +00:00
* Renamed com.rpl.specter.transient namespace to com.rpl.specter.transients to eliminate cljs warning
* Bug fix: END, BEGINNING, FIRST, and LAST now work properly on nil
2016-06-07 22:18:44 +00:00
2016-06-09 12:52:35 +00:00
## 0.11.2
* Eliminated compiler warnings for ClojureScript version
2016-06-09 12:06:52 +00:00
2016-06-08 11:01:17 +00:00
## 0.11.1
2016-06-05 05:18:40 +00:00
* More efficient inline caching for Clojure version, benchmarks show inline caching within 5% of manually precompiled code for all cases
2016-06-08 14:24:04 +00:00
* Added navigators for transients in com.rpl.specter.transient namespace (thanks @aengelberg)
* Huge performance improvement for ALL transform on maps and vectors
2016-06-01 16:27:22 +00:00
* Significant performance improvements for FIRST/LAST for vectors
2016-06-05 02:57:56 +00:00
* Huge performance improvements for `if-path`, `cond-path`, `selected?`, and `not-selected?`, especially for condition path containing only static functions
2016-06-07 20:07:01 +00:00
* Huge performance improvement for `END` on vectors
2016-06-06 20:10:47 +00:00
* Added specialized MAP-VALS navigator that is twice as fast as using [ALL LAST]
2016-06-02 06:45:02 +00:00
* Dropped support for Clojurescript below v1.7.10
2016-06-06 12:16:45 +00:00
* Added :notpath metadata to signify pathedfn arguments that should be treated as regular arguments during inline factoring. If one of these arguments is not a static var reference or non-collection value, the path will not factor.
2016-06-03 20:25:27 +00:00
* Bug fix: `transformed` transform-fn no longer factors into `pred` when an anonymous function during inline factoring
2016-06-06 12:16:45 +00:00
* Bug fix: Fixed nil->val to not replace the val on `false`
2016-06-08 13:40:53 +00:00
* Bug fix: Eliminate reflection when using primitive parameters in an inline cached path
2016-06-01 03:05:53 +00:00
2016-05-31 13:47:54 +00:00
## 0.11.0
2016-05-23 19:33:15 +00:00
* New `path` macro does intelligent inline caching of the provided path. The path is factored into a static portion and into params which may change on each usage of the path (e.g. local parameters). The static part is factored and compiled on the first run-through, and then re-used for all subsequent invocations. As an example, `[ALL (keypath k)]` is factored into `[ALL keypath]`, which is compiled and cached, and `[k]`, which is provided on each execution. If it is not possible to precompile the path (e.g. [ALL some-local-variable]), nothing is cached and the path will be compiled on each run-through.
2016-05-26 20:54:55 +00:00
* BREAKING CHANGE: all `select/transform/setval/replace-in` functions changed to macros and moved to com.rpl.specter.macros namespace. The new macros now automatically wrap the provided path in `path` to enable inline caching. Expect up to a 100x performance improvement without using explicit precompilation, and to be within 2% to 15% of the performance of explicitly precompiled usage.
* Added `select*/transform*/setval*/replace-in*/etc.` functions that have the same functionality as the old `select/transform/setval/replace-in` functions.
* Added `must-cache-paths!` function to throw an error if it is not possible to factor a path into a static portion and dynamic parameters.
* BREAKING CHANGE: `defpath` renamed to `defnav`
* BREAKING CHANGE: `path` renamed to `nav`
* BREAKING CHANGE: `fixed-pathed-path` and `variable-pathed-path` renamed to `fixed-pathed-nav` and `variabled-pathed-nav`
2016-05-23 19:33:15 +00:00
* Added `must` navigator to navigate to a key if and only if it exists in the structure
2016-06-06 16:34:05 +00:00
* Added `continuous-subseqs` navigator
2016-05-23 19:33:15 +00:00
* Added `ATOM` navigator (thanks @rakeshp)
* Added "navigator constructors" that can be defined via `defnavconstructor`. These allow defining a flexible function to parameterize a defnav, and the function integrates with inline caching for high performance.
2016-05-05 18:24:57 +00:00
2016-05-28 17:57:30 +00:00
2016-04-26 14:21:54 +00:00
## 0.10.0
2016-04-18 01:00:58 +00:00
* Make codebase bootstrap cljs compatible
2016-04-18 16:20:20 +00:00
* Remove usage of reducers in cljs version in favor of transducers (thanks @StephenRudolph)
* ALL now maintains type of queues (thanks @StephenRudolph)
2016-04-18 18:26:11 +00:00
* Added `parser` path (thanks @thomasathorne)
2016-04-20 00:41:00 +00:00
* Added `submap` path (thanks @bfabry)
2016-04-21 01:59:20 +00:00
* Added `subselect` path (thanks @aengelberg)
2016-04-21 20:34:58 +00:00
* Fix filterer to maintain the type of the input sequence in transforms
2016-04-24 15:11:50 +00:00
* Integrated zipper navigation into com.rpl.specter.zipper namespace
2016-04-18 01:00:58 +00:00
2016-04-16 00:21:28 +00:00
## 0.9.3
* Change clojure/clojurescript to provided dependencies
* ALL on maps auto-coerces MapEntry to vector, enabling smoother transformation of map keys
2016-01-30 20:13:28 +00:00
* declarepath can now be parameterized
2016-01-31 18:02:00 +00:00
* Added params-reset which calls its path with the params index walked back by the number of params needed by its path. This enables recursive parameterized paths
* Added convenience syntax for defprotocolpath with no params, e.g. (defprotocolpath foo)
2016-02-14 18:35:39 +00:00
* Rename VOID to STOP
2016-01-26 19:20:07 +00:00
## 0.9.2
2016-01-10 15:35:47 +00:00
* Added VOID selector which navigates nowhere
* Better syntax checking for defpath
2016-01-11 15:25:03 +00:00
* Fixed bug in protocol paths (#48)
2016-01-13 06:46:26 +00:00
* Protocol paths now error when extension has invalid number of needed parameters
* Fix replace-in to work with value collection
2016-01-14 18:15:54 +00:00
* Added STAY selector
* Added stay-then-continue and continue-then-stay selectors which enable pre-order/post-order traversals
2016-01-14 22:36:49 +00:00
* Added declarepath and providepath, which enable arbitrary recursive or mutually recursive paths
2016-01-15 15:29:35 +00:00
* Renamed paramspath to path
2016-01-10 15:35:47 +00:00
2016-01-05 14:02:20 +00:00
## 0.9.1
2015-12-16 06:05:27 +00:00
* Fixed reflection in protocol path code
* Optimized late-bound parameterization for JVM implementation by directly creating the object array rather than use object-array
2016-01-05 13:57:55 +00:00
* Incorrectly specified function names in defpath will now throw error
2015-12-16 06:05:27 +00:00
2015-12-12 17:52:27 +00:00
## 0.9.0
2015-11-03 15:52:17 +00:00
* Fixed bug where comp-paths wouldn't work on lazy seqs in cljs
2015-12-12 17:38:28 +00:00
* Renamed defparamspath and defparamscollector to defpath and defcollector
* For Clojure version only, implemented protocol paths (see #38)
2015-11-03 15:52:17 +00:00
2015-10-11 14:45:01 +00:00
## 0.8.0
2015-10-10 15:21:13 +00:00
* Now compatible with Clojure 1.6.0 and 1.5.1 by switching build to cljx (thanks @MerelyAPseudonym)
2015-10-10 15:56:02 +00:00
* Added subset selector (like srange but for sets)
2015-10-11 14:46:26 +00:00
* Added nil->val, NIL->SET, NIL->LIST, and NIL->VECTOR selectors to make it easier to manipulate maps (e.g. (setval [:akey NIL->VECTOR END] [:a :b] amap) to append that vector into that value for the map, even if nothing was at that value at the start)
2015-10-10 15:21:13 +00:00
2015-09-24 17:02:58 +00:00
## 0.7.1
2015-09-12 18:16:35 +00:00
* view can now be late-bound parameterized
* Added a late-bound parameterized version of using a function as a selector called "pred"
* Added paramsfn helper macro for defining filter functions that take late-bound parameters
* walker and codewalker can now be late-bound parameterized
2015-09-12 18:16:35 +00:00
2015-09-11 21:36:16 +00:00
## 0.7.0
2015-12-16 06:06:36 +00:00
* Added late-bound parameterization feature: allows selectors that require params to be precompiled without the parameters, and the parameters are supplied later in bulk. This effectively enables Specter to be used in any situation with very high performance.
2015-09-11 21:36:16 +00:00
* Converted Specter built-in selectors to use late-bound parameterization when appropriate
* ALL, FIRST, and LAST are now precompiled
2015-07-03 21:46:23 +00:00
## 0.6.2
2015-07-02 21:25:00 +00:00
* Added not-selected? selector
* Added transformed selector
2015-07-03 21:46:23 +00:00
* Sped up CLJS implementation for comp-paths by replacing obj-extends? call with satisfies?
* Fixed CLJS implementation to extend core types appropriately
* Used not-native hint to enable direct method invocation to speed up CLJS implementation
2015-07-02 21:25:00 +00:00
2015-07-01 14:36:21 +00:00
## 0.6.1
* Huge speedup to ClojureScript implementation by optimizing field access
2015-07-01 00:09:09 +00:00
## 0.6.0
* Added ClojureScript compatibility
2015-06-30 03:44:18 +00:00
## 0.5.7
* Fix bug in select-one! which wouldn't allow nil result
## 0.5.6
* Add multi-path implementation
* change FIRST/LAST to select nothing on an empty sequence
2015-06-29 22:31:03 +00:00
* Allow sets to be used directly as selectors (acts as filter)
2015-06-22 18:38:34 +00:00
## 0.5.5
* Change filterer to accept a selector (that acts like selected? to determine whether or not to select value)
2015-06-19 18:19:16 +00:00
## 0.5.4
* Change cond-path and if-path to take in a selector for conditionals (same idea as selected?)
2015-06-18 04:56:17 +00:00
## 0.5.3
* Added cond-path and if-path selectors for choosing paths depending on value of structure at that location
2015-06-01 18:22:44 +00:00
## 0.5.2
* Fix error for selectors with one element defined using comp-paths, e.g. [:a (comp-paths :b)]
2015-05-31 12:54:30 +00:00
## 0.5.1
* Added putval for adding external values to collected values list
* nil is now interpreted as identity selector
* empty selector is now interpreted as identity selector instead of producing error