Antti Haapala added the comment:
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
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue27078>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com