GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||
GeezerVison is showing github.com — bpo-42202: Store func annotations as single tuple at bytecode level by uriyyo · Pull Request #23316 · python/cpython Conversation
|
|
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@serhiy-storchaka I have implemented the same logic for module and class annotations, so all annotations will be computed at compilation time. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
a4d717f to
d1f7312
Compare
There was an error while loading. Please reload this page.
|
I have made the requested changes; please review again |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Thanks for making the requested changes! @serhiy-storchaka: please review the changes made to this pull request. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Serhiy Storchaka <[email protected]>
d1f7312 to
da237df
Compare
240166c to
c12fc1c
Compare
|
Rather than return the tuple size via a pointer (out) parameter, you can return the size directly as it cannot be negative, leaving -1 to signify an error. So, int compiler_visit_argannotation(struct compiler *c, identifier id, expr_ty annotation, Py_ssize_t *annotations_len); becomes int compiler_visit_argannotation(struct compiler *c, identifier id, expr_ty annotation); and the use changes from if (compiler_visit_argannotation(..., &len)) goto error; to len = compiler_visit_argannotation(...); if (len < 0) goto error; |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
I think it will make code more complicated because it will require rewriting all ifs for It will be great if @markshannon What is your opinion regarding that? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I prefer my approach (I wouldn't have suggested it otherwise 🙂 ), but the code is fine as it is. I'm still happy with merging it. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I totally agree with you, personally, I don't like when the return value passed through the pointer instead of simple return, as zen said But otherwise, In my opinion, it will make code less readable. if (!compiler_visit_argannotations(c, args->args, &annotations_len)) return 0; if (args->vararg && args->vararg->annotation && !compiler_visit_argannotation(c, args->vararg->arg, args->vararg->annotation, &annotations_len)) return 0; It will be rewritten to: len = compiler_visit_argannotations(c, args->args); if (len < 0) return 0; annotations_len += len; if (args->vararg && args->vararg->annotation) { len = compiler_visit_argannotation(c, args->vararg->arg, args->vararg->annotation); if (len < 0) return 0; annotations_len += len; } This situation is a double-edged sword when we should choose between code readability and code explicity. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I don't have anything valuable to add here, just a small nitpick with the whatsnew.
This optimization makes me really happy :). Thanks Yuri for the PR and Inada-san for the concept.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Co-authored-by: kj <[email protected]>
There was an error while loading. Please reload this page.
|
@Fidget-Spinner Thank you for making docs more clear and for adding Inada to the list of contributors. It's my bad, I must definitely add Inada to the contributor's list because this PR is fully his idea. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Can someone rerun Azure Pipelines? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Even core committers can not re-run Azure Pipeline. Close and reopen is the most easy way to rebuild, although it starts not only Azure Pipeline. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@methane Looks like everything is done and this PR can be merged |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I did |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sure, no problems. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@methane I have regenerated |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Congrats, @uriyyo. And thank you reviewers. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Thanks all, I am happy that we merge this PR💫 @methane Should we do smth similar for class/module annotations? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Reduce memory footprint and improve performance of loading modules having many func annotations.
>>> sys.getsizeof({"a":"int","b":"int","return":"int"})
232
>>> sys.getsizeof(("a","int","b","int","return","int"))
88
The tuple is converted into dict on the fly when `func.__annotations__` is accessed first.
Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Inada Naoki <[email protected]>
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.