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.
Python
argparse.ArgumentParser
is stateless, so adding parents is only inheriting argument configurations. This is equivalent to having value semantics.argparse::ArgumentParser
is stateful. Instead of returning parsed states,parse_args
changes the parser's own states. And I think we should also deliver value semantics, that is,parse_args
in child parser does not change parents' parsing states, andparse_args
in a parser copy does not change the parsing states parser that was copied from.Updated the docs to use the term "common" rather than "shared" to clarify the intention.
Strictly speaking this is a runtime breaking change. But the current behavior is undocumented, untested, and I doubt anybody is relying on that in real code.
The proposed change also eliminates the uses of
shared_ptr
. It maintains two linked lists (not worse than two vectors of shared_ptrs :) ofArgument
s, and index them by pointing the keys into Argument's own storage for names, and the values into list iterators.fixes: #50