This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ztane
Recipients Demur Rumed, eric.smith, mjpieters, rhettinger, serhiy.storchaka, ztane
Date 2016-07-15.07:03:00
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1468566180.82.0.11409853182.issue27078@psf.upfronthosting.co.za>
In-reply-to
Content
Serhiy suggested this in Rietveld:

> For additional optimization we can pack all constant strings, parsed formats and
> flags in one constant object and use the single LOAD_CONST. But this requires
> much larger changes (perhaps including changing the marshal format), and the
> benefit may be small. Maybe we'll get to it eventually, if this approach proves
> efficient enough.

I was thinking about this and got an idea on how to do this too, without changes to marshal. Essentially, let TOS be a tuple of 

    (flags, str1, str2, str3, str4, str5, str6, str7, str8, str9...)

flags would be n bytes for n-part format string; each byte would tell whether:

- the next component is a constant string (bit 0 = 0) from the tuple
- the next component is an interpolated value (bit 0 = 1)
   - and whether it has !s, !r, !a or default conversions (bits 1-2)
   - and whether it has extra argument to format() or not (bit 3) (argument is the next string from the tuple)

thus that tuple for

    a, b = 'Hello', 'World!'
    f'{a!s} {b:10}!'

would be

    (b'\x03\x00\x05\x00', ' ', '10', '!')

and the opcodes would be

    LOAD_FAST (b)
    LOAD_FAST (a)
    LOAD_CONST (0) (the tuple)
    BUILD_FORMAT_STRING 3
History
Date User Action Args
2016-07-15 07:03:01ztanesetrecipients: + ztane, rhettinger, mjpieters, eric.smith, serhiy.storchaka, Demur Rumed
2016-07-15 07:03:00ztanesetmessageid: <1468566180.82.0.11409853182.issue27078@psf.upfronthosting.co.za>
2016-07-15 07:03:00ztanelinkissue27078 messages
2016-07-15 07:03:00ztanecreate