PyPyというPythonの処理系があるそうな。これが速いらしいので、どんなものか試してみた。
インストールはPyPyのホームページからバイナリをダウンロードしてくるだけです。
[追記]Ubuntuだとapt-getで取れました。
試すのは毎度おなじみのたらい回し関数(竹内関数)です。
def tarai(x, y, z): return tarai(tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y)) if x > y else y if __name__ == '__main__': from sys import argv x, y, z = map(lambda arg: int(arg), argv[1:]) print tarai(x, y, z)
普通のPython(CPython)の場合は、
ubuntu@ip-172-31-16-86:~/tarai/python$ time python tarai.py 12 6 0 12 real 0m28.077s user 0m27.942s sys 0m0.128s
である。
PyPyの場合は、
ubuntu@ip-172-31-16-86:~/tarai/python$ time pypy tarai.py 12 6 0 12 real 0m1.109s user 0m1.028s sys 0m0.080s
なんと、27倍も高速ではないか!?これはすごい。
PyPyの何が面白いかって、PyPyはPythonで実装されているということだ。CコンパイラがCで書かれているみたいな、よくわからない話だ。
それでどうして速くなるのか非常に不思議だ。PyPyは特殊なJITコンパイラ技術を用いているみたいだ。
今、論文よんでいるところなので、その辺の仕組みは今後のネタとする。