more precise types in keyword argument method lowering#30926
Conversation
|
Having poked at these recently, I wondered about precisely this change, but I didn't understand where the difficulties and opportunities lay. Specifically, I had wondered about adding the type info so that one could guess where the |
85a4101 to
a35d968
Compare
|
@nanosoldier |
|
Your benchmark job has completed - possible performance regressions were detected. A full report can be found here. cc @ararslan |
1cd1e6c to
75e9b02
Compare
75e9b02 to
69f1334
Compare
|
I ran NewPkgEval and identified some issues. Tests added. Also needs #30972, then this should be ready to go. |
69f1334 to
851d6c3
Compare
We have a bad interaction between two features: (1) generated methods for keyword arguments need to pass the original function around in case it contains closure data, (2) functions that take a function argument but don't call it aren't specialized on that argument (to avoid excessive specialization). That can lead to slow calls in keyword method shims, but is a bit unpredictable. For example it caused the slowdown observed in #30830 (comment), and likely other intermittent performance changes we've seen.
Long story short, this is before:
and this is after:
Now the front end puts a specific type on the argument slot used to forward the function. After all, it knows exactly what function we're dealing with...right? Well, it can be quite difficult to do for closures, where we need to ensure everything is defined in just the right order, since there are some circular dependencies (method A calls method B, but method B needs to mention A in its signature). I hope this works.