On Sat, May 8, 2021 at 2:59 PM Gregory P. Smith <g...@krypto.org> wrote:
> > > On Sat, May 8, 2021 at 2:09 PM Pablo Galindo Salgado <pablog...@gmail.com> > wrote: > >> > Why not put in it -O instead? Then -O means lose asserts and lose >> fine-grained tracebacks, while -OO continues to also >> strip out doc strings. >> >> What if someone wants to keep asserts but do not want the extra data? >> > > exactly my theme. our existing -O and -OO already don't serve all user > needs. (I've witnessed people who need asserts but don't want docstrings > wasting ram jump through hacky hoops to do that). Complicating these > options more by combining additional actions on them them doesn't help. > > The reason we have -O and -OO generate their own special opt-1 and opt-2 > pyc files is because both of those change the generated bytecode and > overall flow of the program by omitting instructions and data. code using > those will run slightly faster as there are fewer instructions. > > The change we're talking about here doesn't do that. It just adds > additional metadata to whatever instructions are generated. So it doesn't > feel -O related. > While I'm the opposite. 😄 Metadata that is not necessary for CPython to function and whose primary driver is better exception tracebacks totally falls into the same camp as "I don't need docstrings" to me. > > While some people aren't going to like the overhead, I'm happy not > offering the choice. > > > Greg, what do you think if instead of not writing it to the pyc file > with -OO or adding a header entry to decide to read/write, we place None in > the field? That way we can > > leverage the option that we intend to add to deactivate displaying the > traceback new information to reduce the data in the pyc files. The only > problem > > is that there will be still a tiny bit of overhead: an extra object per > code object (None), but that's much much better than something that scales > with the > > number of instructions :) > > > > What's your opinion on this? > > I don't understand the pyc structure enough to comment on how that works, > Code to read a .pyc file and use it: https://github.com/python/cpython/blob/a0bd9e9c11f5f52c7ddd19144c8230da016b53c6/Lib/importlib/_bootstrap_external.py#L951-L1015 (I'd explain more but it is the weekend and I technically shouldn't be reading this thread 😉). -Brett > but that sounds fine from a way to store less data if these are stored as > a side table rather than intermingled with each instruction itself. *If > anyone even cares about storing less data.* I would not activate > generation of that in py_compile and compileall based on the -X flag to > disable display of tracebacks though. A flag changing a setting of the > current runtime regarding traceback printing detail level should not change > the metadata in pyc files it emits. I realize -O and -OO behave this way, > but I don't view those as a great example. We're not writing new uniquely > named pyc files, I suggest making this an explicit option for py_compile > and compileall if we're going to support generation of pyc files without > column data at all. > > I'm unclear on what the specific goals are with all of these option > possibilities. > > Who non-hypothetically cares about a 22% pyc file size increase? I don't > think we should be concerned. I'm in favor of always writing them and the > 20% size increase that results in. If pyc size is an issue that should be > its own separate enhancement PEP. When it comes to pyc files there is more > data we may want to store in the future for performance reasons - I don't > see them shrinking without an independent effort. > > Caring about additional data retained in memory at runtime makes more > sense to me as ram cost is much greater than storage cost and is paid > repeatedly per process. Storing an additional reference to None on code > objects where a column information table is perfectly fine. That can be a > -X style interpreter startup option. It isn't something that needs to > impacted by the pyc files. Pass that option to the interpreter, and it > just discards column info tables on code objects after loading them or > compiling them. If people want to optimize for a shared pyc situation with > memory mapping techniques, that is also something that should be a separate > enhancement PEP and not involved here. People writing code to use the > column information should always check it for None first, that'd be > something we document with the new feature. > > -gps > > >> >> On Sat, 8 May 2021 at 22:05, Ethan Furman <et...@stoneleaf.us> wrote: >> >>> On 5/8/21 1:31 PM, Pablo Galindo Salgado wrote: >>> >> We can't piggy back on -OO as the only way to disable this, it needs >>> to >>> >> have an option of its own. -OO is unusable as code that relies on >>> "doc" >>> >> strings as application data such as >>> http://www.dabeaz.com/ply/ply.html >>> >> exists. >>> > >>> > -OO is the only sensible way to disable the data. There are two >>> things to disable: >>> > >>> > * The data in pyc files >>> > * Printing the exception highlighting >>> >>> Why not put in it -O instead? Then -O means lose asserts and lose >>> fine-grained tracebacks, while -OO continues to also >>> strip out doc strings. >>> >>> -- >>> ~Ethan~ >>> _______________________________________________ >>> Python-Dev mailing list -- python-dev@python.org >>> To unsubscribe send an email to python-dev-le...@python.org >>> https://mail.python.org/mailman3/lists/python-dev.python.org/ >>> Message archived at >>> https://mail.python.org/archives/list/python-dev@python.org/message/BEE4BGUZHXBTVDPOW5R4DC3S463XC3EJ/ >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >> _______________________________________________ >> Python-Dev mailing list -- python-dev@python.org >> To unsubscribe send an email to python-dev-le...@python.org >> https://mail.python.org/mailman3/lists/python-dev.python.org/ >> Message archived at >> https://mail.python.org/archives/list/python-dev@python.org/message/WK4KXZPOSWYMI3C5AILQCEYVZRCDFL7N/ >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > _______________________________________________ > Python-Dev mailing list -- python-dev@python.org > To unsubscribe send an email to python-dev-le...@python.org > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/python-dev@python.org/message/Q5RCT3VMQFPZTJJKB666PML4K2KZ2HJW/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/3SIFWW2H4GXYDYQ7AYCZWHJZKTP7YJJT/ Code of Conduct: http://python.org/psf/codeofconduct/