On Sun, Jul 2, 2017 at 8:52 AM, Soni L. <fakedme...@gmail.com> wrote: > On 2017-07-01 07:34 PM, Victor Stinner wrote: >> >> Let's say that you have a function "def mysum (x; y): return x+y", do you >> always want to use your new IADD instruction here? What if I call mysum >> ("a", "b")? >> >> Victor > > > Let's say that you do. Given how short it is, it would just get inlined. > Your call of mysum ("a", "b") would indeed not use IADD, nor would it be a > call. It would potentially not invoke any operators, but instead get > replaced with "ab". > > When you have a tracing JIT, you can do away with a lot of overhead. You can > inline functions, variables, do away with typechecks, and many other things. > This holds true even if that JIT never emits a single byte of machine code.
Let's try a more complicated example. # demo.py def mysum(x, y): return x + y def do_stuff(a, b): print(mysum("foo", "bar")) print(mysum(5, 7)) print(mysum(a, 42)) print(mysum(b, "spam")) What can you optimize here? Now let's look at a file that might call it: # cruel.py import demo def nasty(x, y): demo.mysum = random.choice([ lambda x, y: x + y, lambda x, y: f"{x} + f{y}", lambda x, y: "muahahaha", ]) return Ellipsis demo.mysum = nasty demo.do_stuff("what", "now?") Unless you can prove that this doesn't happen, you can't really optimize much of mysum away. That's where a tracing JIT compiler has the advantage: it can notice *at run time* that you're not doing this kind of thing, and in effect, forfeit the optimizations when you're running your tests (since test suites are where this kind of monkey-patching tends to happen). ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/