Refactor chained syntax to be transactional #8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Because cloning objects and arrays is generally O(N) in the size of the number
of keys or elements, immutable operations are relatively expensive. In cases
where multiple operations are performed without any opportunity for others to
observe intermediate values, the obvious optimization is to clone only once (for
the first operation) and mutate afterward.
So, refactor our "bound" or chained syntax as follows:
source object at most once
value
is called on chainAchieving this necessitated some refactoring of the internal API. All operations
now take a source (
src
) and a destination (dest
). When called "unchained",the mutation methods receive a
null
source.Fix #5
I've deferred updating the README until this is ready to land. I can either push an update to the PR or amend the docs in a follow-on PR.