specter/CHANGES.md

108 lines
6.1 KiB
Markdown
Raw Normal View History

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-05-28 17:57:30 +00:00
* Added `continous-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