Comment by cogman10

20 hours ago

I think this is a major issue with requiring a PEP for what's a performance optimization.

JITs are big nasty things that by their nature have to do a lot of things. You are basically saying "Give us a PEP for a new python interpreter and compiler".

What they do is fuzzy by their nature because optimizations are very rarely universally beneficial. It's a game of measuring, looking for regressions, and tackling the biggest problem next for whatever sample applications you have available. You always run into the risk of overfitting on top of all that (You may have made django faster, but you've made flask slower).

This is the sort of thing that, IMO, should not go through the PEP process. It's an implementation detail for the runtime.

Imagine, for example, if the JVM needed a bunch of JEPs for JIT improvements. They'd never get done. Or if any javascript engine needed ECMA acceptance before they could do a new JIT optimization.

> Imagine, for example, if the JVM needed a bunch of JEPs for JIT improvements.

FWIW, I definitely can find a bunch of both PEPs and JEPs for internal optimizations, random examples:

https://peps.python.org/pep-0509/

https://openjdk.org/jeps/147

  • You can find those JEPs, but frankly they are there for 1 of 2 reasons.

    1. An outsider to the regular OpenJDK dev team proposing an optimization.

    2. Advertising for a cool new performance tweak with potentially large impact.

    You'll also notice that the JEP descriptions are very different from PEP descriptions.

    Probably the largest JEP for the JVM, Valhalla

    https://openjdk.org/jeps/401

    Does not have the same level of requirements being asked of the Python JIT. Further, it's well understood that this JEP will "live on main" for quite some time in preview before it's accepted and merged.

    What the JEP does, instead, is simply describe the feature and potential risks.

    The vast majority of JVM optimizations do not get a JEP.

    • Fair, I don’t argue with that, I’m not knowledgeable about Java’s processes. Just one thing:

      > The vast majority of JVM optimizations do not get a JEP.

      In Python too. Still, the JIT really is just a really big thing. I don’t know if there could be a better way to do it, as either 1. You develop it off-branch and… make an enormous PR when you’re done, with risks of getting rejected anyway? Or 2, you allow more experiments on main like Rust, but then you end up with hundreds of minor half-maintained nightly-only features, possibly conflicting with each other, and eventually go through bureaucracy to remove them anyway.

      3 replies →