{{ message }}
gh-77273: Better bytecodes for f-strings#6132
Merged
markshannon merged 6 commits intoJun 14, 2023
Merged
Conversation
554c1b6 to
d79893a
Compare
March 17, 2018 13:08
35dea3c to
6a88b26
Compare
May 6, 2019 16:10
|
Any update on this @taleinat suggested sharing benchmarks here https://bugs.python.org/issue33092. Otherwise due to lack of activity I think we can close this. |
Sorry, something went wrong.
6a88b26 to
cc0f91e
Compare
December 1, 2020 16:25
cc0f91e to
7c1f2a6
Compare
August 25, 2021 13:30
|
This PR is stale because it has been open for 30 days with no activity. |
Sorry, something went wrong.
7c1f2a6 to
3af4084
Compare
June 8, 2023 11:34
Member
Author
|
Updated to use the new bytecode definition format. Removes the conditional stack effect, simplifying tooling around these instructions. |
Sorry, something went wrong.
Member
|
Looks like you missed out the doc update. |
Sorry, something went wrong.
Member
Author
Sorry, something went wrong.
iritkatriel
reviewed
Jun 14, 2023
iritkatriel
approved these changes
Jun 14, 2023
carljm
added a commit
to carljm/cpython
that referenced
this pull request
Jun 15, 2023
* main: (57 commits) pythongh-105831: Fix NEWS blurb from pythongh-105828 (python#105833) pythongh-105820: Fix tok_mode expression buffer in file & readline tokenizer (python#105828) pythongh-105751, test_ctypes: Remove disabled tests (python#105826) pythongh-105821: Use a raw f-string in test_httpservers.py (python#105822) pythongh-105751: Remove platform usage in test_ctypes (python#105819) pythongh-105751: Reenable disable test_ctypes tests (python#105818) pythongh-105751: Remove dead code in test_ctypes (python#105817) More reorganisation of the typing docs (python#105787) Improve docs for `typing.dataclass_transform` (python#105792) pythonGH-89812: Churn `pathlib.Path` test methods (python#105807) pythongh-105800: Issue SyntaxWarning in f-strings for invalid escape sequences (python#105801) pythongh-105751: Cleanup test_ctypes imports (python#105803) pythongh-105481: add HAS_JUMP flag to opcode metadata (python#105791) pythongh-105751: test_ctypes avoids the operator module (pythonGH-105797) pythongh-105751: test_ctypes: Remove @need_symbol decorator (pythonGH-105798) pythongh-104909: Implement conditional stack effects for macros (python#105748) pythongh-75905: Remove test_xmlrpc_net: skipped since 2017 (python#105796) pythongh-105481: Fix types and a bug for pseudos (python#105788) Update DSL docs for cases generator (python#105753) pythonGH-77273: Better bytecodes for f-strings (pythonGH-6132) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.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.
Simplify and speed up interpreter for f-strings.
tldr; Do work in the compiler instead of the interpreter.
Splits the FORMAT_VALUE opcode into CONVERT_VALUE, FORMAT_SIMPLE and FORMAT_WITH_SPEC.
The compiler can then emit the optimal sequence for each format expression.
The three new opcodes are much simpler than the one they replace, actually removing a few lines of code from the interpreter.
The CONVERT_VALUE is emitted only if a conversion is present.
In the standard library only (approx) 20% of f-strings include a conversion.
FORMAT_WITH_SPEC is emitted if a format specifier is present.
Otherwise FORMAT_SIMPLE is emitted.
In the standard library about 70% of format expressions can be formatted with just the simple (and fast)
FORMAT_SIMPLE opcode.
https://bugs.python.org/issue33092