请考虑以下代码段:
class Duck:
def duck(self):
pass
ducks = [Duck() for i in range(10)]
for duck in ducks:
duck.duck() #<-----
是否会动态调度duck.duck()调用(即每次完成方法查找),或者JIT将能够推断出我们正在迭代一个稳定的ducks列表并用mem +替换调用偏移θ
如果是,那我怎么可能自己看到它(即如果有任何或生成的组件,如何检查IR代码);如果不是,为什么呢?
答案 0 :(得分:3)
PyPy团队中的人们正在以合理的方式为外部人员做这件事。与此同时,以下是查看JIT编译器生成的IR(以及可选的机器代码)的当前方法的说明。
这些说明在Linux上进行了测试。他们也应该在OS / X上工作。对于Windows,您需要像往常一样调整大多数命令的语法。
查看主PyPy存储库的副本(需要很长时间!):例如:对于5.x版本,hg clone https://bitbucket.org/pypy/pypy -r release-5.x -u release-5.x pypysrc
为PyPy安装https://bitbucket.org/pypy/jitviewer(通常我们会先使用hg clone https://bitbucket.org/pypy/jitviewer
查看,然后virtualenv -p pypy pypy-venv; . pypy-venv/bin/activate; cd /path/to/jitviewer; pypy setup.py install
)
像这样运行你的示例程序:PYPYLOG=jit:log pypy mytest.py
;这会生成一个名为log
查看日志,方法是启动PYTHONPATH=/path/to/pypysrc jitviewer.py --log log
,然后在http://127.0.0.1:5000/
查看网址。