Abstract
Pythonは読みやすく書きやすいだけでなく、処理系の進化によって実行性能の面でも少しずつ賢くなっています。CPython 3.11以降の高速化、Python 3.13/3.14のexperimental JIT、そしてJITを実用的に活用しているPyPyなど、Pythonコードを効率よく動かすための仕組みは広がっています。一方で、それぞれが何を見て、どのように速くしているのかは、普段Pythonを書いているだけではあまり意識しないかもしれません。
本セッションでは、短いPythonコードを題材に、Pythonが実行されるまでの流れと、実行中に行われる最適化のしくみを示します。あわせて、処理が遅いときにボトルネックの性質をどう見立て、CPythonの最適化、PyPy、NumPy、C拡張といった選択肢をどう考えればよいのかも整理します。
ソースコードは、プログラムの構造を表すASTに変換され、次にCPythonが実行しやすい命令列であるバイトコードになります。さらに近年のCPythonでは、実行中に観測された型や操作に応じて、バイトコード実行を効率化する仕組みがあります。AST、バイトコード、JITといった言葉を知らなくても追えるよう、足し算やループ、関数呼び出し等を例に進めます。
また、PyPyが競技プログラミングなどで選ばれる理由や、反対にNumPyやC拡張との相性で注意が必要な点も、CPythonとの比較から整理します。一方で、Pythonの最適化はgccのような静的コンパイラとは前提が異なり、何でも強力に機械語へ最適化できるわけではありません。「型ヒントを書けば速くなるのか」「PyPyにすると必ず速いのか」といった疑問を通じて、Pythonの速さを複数の層に分けて理解し、日々のコードを見る視点を増やすことを目指します。
About the speaker
curekoshimizu
京都大学理学部に首席で合格し京都大学大学院を経てエンジニアの道へ。新卒のFixstarsではExecutive Engineerとして組織リードし上場を経験。その後Mujinではアーキテクト。続くPreferred NetworksではEMを務めるとともに、物流部門の立ち上げを主導。HacobuではCTO室室長・研究開発部部長として着任。2024年5月よりRecustomerにCTOとして参画。Pythonは10年以上つかっており、大好きな言語です!