GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-77273: Better bytecodes for f-strings by markshannon · Pull Request #6132 · python/cpython

Conversation

@markshannon

@markshannon markshannon commented Mar 17, 2018 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

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

  • Issue: The bytecode for f-string formatting is inefficient. #77273

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bluss and machinexa2 reacted with thumbs up emoji
All reactions
  • 👍 2 reactions
@the-knights-who-say-ni the-knights-who-say-ni added the CLA signed label Mar 17, 2018
@bedevere-bot bedevere-bot added the awaiting review label Mar 17, 2018
@markshannon
markshannon force-pushed the better-bytecode-fstring branch from 554c1b6 to d79893a Compare March 17, 2018 13:08
@berkerpeksag
berkerpeksag requested a review from ericvsmith March 23, 2018 13:53
@markshannon
markshannon force-pushed the better-bytecode-fstring branch from 35dea3c to 6a88b26 Compare May 6, 2019 16:10
@alimcmaster1

alimcmaster1 commented Apr 11, 2020

Copy link
Copy Markdown

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.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@markshannon
markshannon force-pushed the better-bytecode-fstring branch from 6a88b26 to cc0f91e Compare December 1, 2020 16:25
@bluss bluss mentioned this pull request Jun 19, 2021
bpo-33092: The bytecode for f-string formatting is inefficient. faster-cpython/ideas#61
Closed
@markshannon
markshannon force-pushed the better-bytecode-fstring branch from cc0f91e to 7c1f2a6 Compare August 25, 2021 13:30
@ezio-melotti ezio-melotti removed the CLA signed label Jul 13, 2022
@github-actions

github-actions Bot commented Aug 16, 2022

Copy link
Copy Markdown

This PR is stale because it has been open for 30 days with no activity.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Aug 16, 2022
@markshannon markshannon mentioned this pull request Sep 1, 2022
The bytecode for f-string formatting is inefficient. #77273
Closed
@markshannon markshannon mentioned this pull request Feb 13, 2023
gh-101799: implement PREP_RERAISE_STAR as an intrinsic function #101800
Merged
@furkanonder

furkanonder commented May 11, 2023

Copy link
Copy Markdown
Contributor

CC: @rhettinger @ambv

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot removed the stale Stale PR or inactive for long period of time. label May 14, 2023
markshannon added 4 commits June 5, 2023 09:03
@markshannon
Avoid conditional stack effects when compiling f-strings.
3af4084
@markshannon
Merge branch 'main' into better-bytecode-fstring
a84bd65
@markshannon
Fix up magic number.
b6d7171
@markshannon
Document new instructions.
62a3404
@markshannon markshannon closed this Jun 8, 2023
@markshannon markshannon reopened this Jun 8, 2023
@markshannon
markshannon requested review from brettcannon, ericsnowcurrently, iritkatriel, ncoghlan and warsaw as code owners June 8, 2023 11:32
@markshannon
markshannon force-pushed the better-bytecode-fstring branch from 7c1f2a6 to 3af4084 Compare June 8, 2023 11:34
@markshannon

markshannon commented Jun 8, 2023

Copy link
Copy Markdown
Member Author

Updated to use the new bytecode definition format.

Removes the conditional stack effect, simplifying tooling around these instructions.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@iritkatriel

iritkatriel commented Jun 8, 2023

Copy link
Copy Markdown
Member

Looks like you missed out the doc update.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@brettcannon
brettcannon removed their request for review June 8, 2023 21:04
markshannon added 2 commits June 9, 2023 10:56
@markshannon
Merge branch 'main' into better-bytecode-fstring
31385d1
@markshannon
Merge branch 'main' into better-bytecode-fstring
641466c
@markshannon

markshannon commented Jun 12, 2023

Copy link
Copy Markdown
Member Author

#105678

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@gvanrossum gvanrossum changed the title bpo-33092: Better bytecodes for f-strings gh-77273: Better bytecodes for f-strings Jun 12, 2023
iritkatriel
iritkatriel reviewed Jun 14, 2023
View reviewed changes
Comment thread Lib/dis.py
Comment on lines +507 to +508
argval = (None, str, repr, ascii)[arg]
argrepr = ('', 'str', 'repr', 'ascii')[arg]

@iritkatriel iritkatriel Jun 8, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since oparg 0 isn't a thing (right?), maybe write this as:

Suggested change
argval = (None, str, repr, ascii)[arg]
argrepr = ('', 'str', 'repr', 'ascii')[arg]
argval = (_, str, repr, ascii)[arg]
argrepr = (_, 'str', 'repr', 'ascii')[arg]

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@markshannon markshannon Jun 14, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is _? We might not use the 0th item, but it still needs to be defined.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@iritkatriel iritkatriel Jun 14, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIUC _ is the convention for ‘unused value’.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@markshannon markshannon Jun 14, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For lvalues, sure, but this is an rvalue.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
iritkatriel
iritkatriel approved these changes Jun 14, 2023
View reviewed changes
@bedevere-bot bedevere-bot added awaiting merge and removed awaiting review labels Jun 14, 2023
@markshannon
markshannon merged commit 1d857da into python:main Jun 14, 2023
@bedevere-bot bedevere-bot removed the awaiting merge label Jun 14, 2023
carljm added a commit to carljm/cpython that referenced this pull request Jun 15, 2023
@carljm
Merge branch 'main' into modulelocals
166aca9
* 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)
  ...
@ShaharNaveh ShaharNaveh mentioned this pull request Dec 2, 2025
Align f-string related bytecodes with 3.13 RustPython/RustPython#6321
Merged
@ShaharNaveh ShaharNaveh mentioned this pull request Apr 25, 2026
Unused FVC_NONE definition #148986
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@iritkatriel iritkatriel iritkatriel approved these changes
@ericvsmith ericvsmith Awaiting requested review from ericvsmith
@ericsnowcurrently ericsnowcurrently Awaiting requested review from ericsnowcurrently ericsnowcurrently is a code owner
@ncoghlan ncoghlan Awaiting requested review from ncoghlan ncoghlan is a code owner
@warsaw warsaw Awaiting requested review from warsaw warsaw is a code owner

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

7 participants

@markshannon @alimcmaster1 @furkanonder @iritkatriel @the-knights-who-say-ni @ezio-melotti @bedevere-bot
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.